diff --git a/test/DufyNFT.test.ts b/test/DufyNFT.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3131b9c33fa6c7dd62b36620f62a8f747234f49e --- /dev/null +++ b/test/DufyNFT.test.ts @@ -0,0 +1,52 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { DufyNFT } from "../typechain-types"; + +describe("DufyNFT", function () { + let dufyNFT: DufyNFT; + let owner: any, addr1: any, addr2: any; + + beforeEach(async function () { + [owner, addr1, addr2] = await ethers.getSigners(); + + const DufyNFTFactory = await ethers.getContractFactory("DufyNFT"); + dufyNFT = (await DufyNFTFactory.deploy(owner.address, owner.address)) as DufyNFT; + await dufyNFT.waitForDeployment(); + }); + + it("Doit initialiser correctement le contrat", async function () { + expect(await dufyNFT.owner()).to.equal(owner.address); + }); + + it("Doit permettre au propriétaire de minter un NFT", async function () { + const tokenURI = "ipfs://sampleURI"; + const mintTx = await dufyNFT.mintNFT(addr1.address, tokenURI); + await mintTx.wait(); + + const tokenId = 1; + expect(await dufyNFT.ownerOf(tokenId)).to.equal(addr1.address); + expect(await dufyNFT.tokenURI(tokenId)).to.equal(tokenURI); + }); + + it("Doit empêcher un utilisateur non propriétaire de minter un NFT", async function () { + await expect(dufyNFT.connect(addr1).mintNFT(addr1.address, "ipfs://test")) + .to.be.revertedWithCustomError(dufyNFT, "OwnableUnauthorizedAccount"); + }); + + it("Doit permettre la mise à jour des royalties par le propriétaire", async function () { + const newRoyaltyReceiver = addr1.address; + const newRoyaltyPercentage = 300; // 3% + + await dufyNFT.updateRoyaltyReceiver(newRoyaltyReceiver, newRoyaltyPercentage); + const royaltyInfo = await dufyNFT.royaltyInfo(1, 10000); // 10,000 = 100% + + expect(royaltyInfo[0]).to.equal(newRoyaltyReceiver); + expect(royaltyInfo[1]).to.equal(newRoyaltyPercentage); + }); + + it("Doit empêcher un utilisateur non propriétaire de modifier les royalties", async function () { + await expect( + dufyNFT.connect(addr1).updateRoyaltyReceiver(addr2.address, 400) + ).to.be.revertedWithCustomError(dufyNFT, "OwnableUnauthorizedAccount"); + }); +});