BasicERC1155.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { expect } from "chai"
  2. import { ethers } from "hardhat"
  3. import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers"
  4. describe("BasicERC1155", () => {
  5. const setupFixture = async () => {
  6. const signers = await ethers.getSigners()
  7. const name = "ProtoToken"
  8. const symbol = "PT"
  9. const baseURI = "ipfs://base-uri/"
  10. const contractURI = "ipfs://contract-uri"
  11. const owner = signers[0].address
  12. const BasicERC1155 = await ethers.getContractFactory("BasicERC1155")
  13. const contract = await BasicERC1155.deploy(name, symbol, baseURI, contractURI, owner, {
  14. from: owner,
  15. })
  16. return {
  17. contract,
  18. contractAddress: await contract.getAddress(),
  19. deployer: owner,
  20. accounts: await ethers.getSigners(),
  21. contractConstructor: {
  22. name,
  23. symbol,
  24. baseURI,
  25. contractURI,
  26. owner,
  27. },
  28. }
  29. }
  30. it("Should Return Valid Contract Configurations Passed In Constructor", async () => {
  31. const { contractConstructor, contract } = await loadFixture(setupFixture)
  32. expect(await contract.name()).to.equal(contractConstructor.name)
  33. expect(await contract.symbol()).to.equal(contractConstructor.symbol)
  34. expect(await contract.contractURI()).to.equal(contractConstructor.contractURI)
  35. expect(await contract.owner()).to.equal(contractConstructor.owner)
  36. })
  37. describe("Minting Functionality", () => {
  38. it("Should Increase Supply When Minting", async () => {
  39. const { contract, deployer } = await loadFixture(setupFixture)
  40. expect(await contract["totalSupply(uint256)"](1)).to.equal(0)
  41. expect(await contract["totalSupply(uint256)"](2)).to.equal(0)
  42. await contract.mintBatch(deployer, [1, 2], [2000, 4000])
  43. expect(await contract["totalSupply(uint256)"](1)).to.equal(2000)
  44. expect(await contract["totalSupply(uint256)"](2)).to.equal(4000)
  45. expect(await contract.balanceOf(deployer, 1)).to.equal(2000)
  46. expect(await contract.balanceOf(deployer, 2)).to.equal(4000)
  47. })
  48. it("Should Allow Minting Only to Contract Owner - mint", async () => {
  49. const { contract, accounts } = await loadFixture(setupFixture)
  50. await expect(contract.connect(accounts[1]).mint(accounts[1].address, 1, 1000))
  51. .to.be.revertedWithCustomError(contract, "OwnableUnauthorizedAccount")
  52. .withArgs(await accounts[1].getAddress())
  53. })
  54. it("Should Allow Minting Only to Contract Owner - mintBatch", async () => {
  55. const { contract, accounts } = await loadFixture(setupFixture)
  56. await expect(contract.connect(accounts[1]).mintBatch(accounts[1].address, [1], [1000]))
  57. .to.be.revertedWithCustomError(contract, "OwnableUnauthorizedAccount")
  58. .withArgs(await accounts[1].getAddress())
  59. })
  60. })
  61. describe("Contract And Token Metadata", () => {
  62. it("Should Return Correct Token URI", async () => {
  63. const { contract, contractConstructor } = await loadFixture(setupFixture)
  64. expect(await contract.uri(1)).to.equal(`${contractConstructor.baseURI}1.json`)
  65. })
  66. it("Should Return Correct Contract URI", async () => {
  67. const { contract, contractConstructor } = await loadFixture(setupFixture)
  68. expect(await contract.contractURI()).to.equal(contractConstructor.contractURI)
  69. })
  70. })
  71. })