const { expect } = require('chai'); const { ethers } = require('hardhat'); describe('AccessToken', function () { let AccessToken; let accessToken; let owner; let addr1; let addr2; beforeEach(async function () { [owner, addr1, addr2] = await ethers.getSigners(); AccessToken = await ethers.getContractFactory('AccessToken'); accessToken = await AccessToken.deploy(); }); describe('Minting', function () { it('Should mint admin token', async function () { await accessToken.mintAccessToken(addr1.address, 0); expect(await accessToken.checkRole(addr1.address)).to.equal(0); }); it('Should mint moderator token', async function () { await accessToken.mintAccessToken(addr1.address, 1); expect(await accessToken.checkRole(addr1.address)).to.equal(1); }); }); describe('Access Control', function () { it('Should fail for non-token holders', async function () { await expect(accessToken.checkRole(addr1.address)).to.be.revertedWith('No active token'); }); it('Should revoke access', async function () { await accessToken.mintAccessToken(addr1.address, 0); const tokenId = await accessToken.activeTokens(addr1.address); await accessToken.revokeToken(tokenId); await expect(accessToken.checkRole(addr1.address)).to.be.revertedWith('No active token'); }); }); });