CommunityMasterTokenFactory.t.sol
1 // SPDX-License-Identifier: UNLICENSED 2 pragma solidity ^0.8.17; 3 4 import { Test } from "forge-std/Test.sol"; 5 import { DeployContracts } from "../script/DeployContracts.s.sol"; 6 import { DeploymentConfig } from "../script/DeploymentConfig.s.sol"; 7 import { BaseTokenFactory } from "../contracts/factories/BaseTokenFactory.sol"; 8 import { CommunityMasterTokenFactory } from "../contracts/factories/CommunityMasterTokenFactory.sol"; 9 import { MasterToken } from "../contracts/tokens/MasterToken.sol"; 10 import { CommunityTokenDeployer } from "../contracts/CommunityTokenDeployer.sol"; 11 12 contract CommunityMasterTokenFactoryTest is Test { 13 DeploymentConfig internal deploymentConfig; 14 15 address internal deployer; 16 17 CommunityTokenDeployer internal tokenDeployer; 18 19 CommunityMasterTokenFactory internal masterTokenFactory; 20 21 function setUp() public virtual { 22 DeployContracts deployment = new DeployContracts(); 23 (tokenDeployer,,, masterTokenFactory, deploymentConfig) = deployment.run(); 24 deployer = deploymentConfig.deployer(); 25 } 26 } 27 28 contract DeploymentTest is CommunityMasterTokenFactoryTest { 29 function setUp() public virtual override { 30 CommunityMasterTokenFactoryTest.setUp(); 31 } 32 33 function test_Deployment() public { 34 assertEq(masterTokenFactory.owner(), deployer); 35 assertEq(masterTokenFactory.tokenDeployer(), address(tokenDeployer)); 36 } 37 } 38 39 contract SetTokenDeployerAddressTest is CommunityMasterTokenFactoryTest { 40 event TokenDeployerAddressChange(address indexed); 41 42 function setUp() public virtual override { 43 CommunityMasterTokenFactoryTest.setUp(); 44 } 45 46 function test_RevertWhen_SenderIsNotOwner() public { 47 vm.expectRevert(bytes("Ownable: caller is not the owner")); 48 masterTokenFactory.setTokenDeployerAddress(makeAddr("something")); 49 } 50 51 function test_RevertWhen_InvalidTokenDeployerAddress() public { 52 vm.prank(deployer); 53 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenDeployerAddress.selector); 54 masterTokenFactory.setTokenDeployerAddress(address(0)); 55 } 56 57 function test_SetTokenDeployerAddress() public { 58 address someAddress = makeAddr("someAddress"); 59 vm.prank(deployer); 60 vm.expectEmit(true, true, true, true); 61 emit TokenDeployerAddressChange(someAddress); 62 masterTokenFactory.setTokenDeployerAddress(someAddress); 63 assertEq(masterTokenFactory.tokenDeployer(), someAddress); 64 } 65 } 66 67 contract CreateTest is CommunityMasterTokenFactoryTest { 68 event CreateToken(address indexed); 69 70 function setUp() public virtual override { 71 CommunityMasterTokenFactoryTest.setUp(); 72 } 73 74 function test_RevertWhen_SenderIsNotTokenDeployer() public { 75 string memory name = "TestToken"; 76 string memory symbol = "TEST"; 77 string memory baseURI = "http://test.dev"; 78 address ownerToken = makeAddr("ownerToken"); 79 bytes memory signerPublicKey = bytes(""); 80 81 vm.prank(makeAddr("notTokenDeployer")); 82 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_NotAuthorized.selector); 83 masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 84 } 85 86 function test_RevertWhen_InvalidTokenMetadata() public { 87 string memory name = ""; 88 string memory symbol = ""; 89 string memory baseURI = ""; 90 address ownerToken = makeAddr("ownerToken"); 91 bytes memory signerPublicKey = bytes(""); 92 93 vm.startPrank(address(tokenDeployer)); 94 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 95 masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 96 97 baseURI = "http://test.dev"; 98 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 99 masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 100 101 symbol = "TEST"; 102 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 103 masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 104 } 105 106 function test_RevertWhen_InvalidOwnerTokenAddress() public { 107 string memory name = "TestToken"; 108 string memory symbol = "TEST"; 109 string memory baseURI = "http://test.dev"; 110 address ownerToken = address(0); 111 bytes memory signerPublicKey = bytes(""); 112 113 vm.prank(address(tokenDeployer)); 114 vm.expectRevert(CommunityMasterTokenFactory.CommunityMasterTokenFactory_InvalidOwnerTokenAddress.selector); 115 masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 116 } 117 118 function test_Create() public { 119 string memory name = "TestToken"; 120 string memory symbol = "TEST"; 121 string memory baseURI = "http://test.dev"; 122 address ownerToken = makeAddr("ownerToken"); 123 bytes memory signerPublicKey = bytes("some public key"); 124 125 vm.prank(address(tokenDeployer)); 126 vm.expectEmit(false, false, false, false); 127 emit CreateToken(makeAddr("some address")); 128 address masterTokenAddress = masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey); 129 130 assertEq(MasterToken(masterTokenAddress).totalSupply(), 0); 131 assertEq(MasterToken(masterTokenAddress).maxSupply(), type(uint256).max); 132 assertEq(MasterToken(masterTokenAddress).transferable(), false); 133 assertEq(MasterToken(masterTokenAddress).remoteBurnable(), true); 134 assertEq(MasterToken(masterTokenAddress).ownerToken(), ownerToken); 135 } 136 }