// SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.17; import {ContributorNFTV1} from "src/nft/ContributorNFTV1.sol"; import {ERC20BurnableMock} from "@openzeppelin/contracts/mocks/ERC20BurnableMock.sol"; import {ERC1155BurnableMock} from "@openzeppelin/contracts/mocks/ERC1155BurnableMock.sol"; import {MockERC20} from "solmate/test/utils/mocks/MockERC20.sol"; import {TestWithDeployments} from "./util/TestWithDeployments.sol"; contract ContributorNFTTest is TestWithDeployments { uint256 internal constant YEAR = 365 days; address internal admin = address(1); address internal user = address(2); function setUp() public { vm.label(admin, "Admin"); vm.label(user, "User"); // Setup smart contracts vm.startPrank(admin); deployAll(admin); vm.stopPrank(); // Register avatar NFT vm.startPrank(user); registerContributorNFT(user, keccak256("secret"), YEAR, "johndoe"); vm.stopPrank(); } function testNoApprovals() public { vm.startPrank(user); vm.expectRevert(ContributorNFTV1.TradingForbidden.selector); contributorNFT.approve(admin, 86745341786912841616557368118532256523691956314975099975829920571153145112669); vm.expectRevert(ContributorNFTV1.TradingForbidden.selector); contributorNFT.setApprovalForAll(admin, true); vm.stopPrank(); } function testTranfersWorkNormally() public { vm.startPrank(user); contributorNFT.transferFrom(user, admin, 86745341786912841616557368118532256523691956314975099975829920571153145112669); assertTrue(contributorNFT.ownerOf(86745341786912841616557368118532256523691956314975099975829920571153145112669) == admin); vm.stopPrank(); } function testSafeTranfersWorkNormally() public { vm.startPrank(user); contributorNFT.safeTransferFrom(user, admin, 86745341786912841616557368118532256523691956314975099975829920571153145112669); assertTrue(contributorNFT.ownerOf(86745341786912841616557368118532256523691956314975099975829920571153145112669) == admin); vm.stopPrank(); } function testUserCantEnableApprovals() public { vm.startPrank(user); vm.expectRevert("Ownable: caller is not the owner"); identityNFT.ownerToggleApprovals(true); vm.stopPrank(); } }