CommunityOwnerTokenFactory.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 { CommunityOwnerTokenFactory } from "../contracts/factories/CommunityOwnerTokenFactory.sol"; 9 import { OwnerToken } from "../contracts/tokens/OwnerToken.sol"; 10 import { CommunityTokenDeployer } from "../contracts/CommunityTokenDeployer.sol"; 11 12 contract CommunityOwnerTokenFactoryTest is Test { 13 DeploymentConfig internal deploymentConfig; 14 15 address internal deployer; 16 17 CommunityTokenDeployer internal tokenDeployer; 18 19 CommunityOwnerTokenFactory internal ownerTokenFactory; 20 21 function setUp() public virtual { 22 DeployContracts deployment = new DeployContracts(); 23 (tokenDeployer,, ownerTokenFactory,, deploymentConfig) = deployment.run(); 24 deployer = deploymentConfig.deployer(); 25 } 26 } 27 28 contract DeploymentTest is CommunityOwnerTokenFactoryTest { 29 function setUp() public virtual override { 30 CommunityOwnerTokenFactoryTest.setUp(); 31 } 32 33 function test_Deployment() public { 34 assertEq(ownerTokenFactory.owner(), deployer); 35 assertEq(ownerTokenFactory.tokenDeployer(), address(tokenDeployer)); 36 } 37 } 38 39 contract SetTokenDeployerAddressTest is CommunityOwnerTokenFactoryTest { 40 event TokenDeployerAddressChange(address indexed); 41 42 function setUp() public virtual override { 43 CommunityOwnerTokenFactoryTest.setUp(); 44 } 45 46 function test_RevertWhen_SenderIsNotOwner() public { 47 vm.expectRevert(bytes("Ownable: caller is not the owner")); 48 ownerTokenFactory.setTokenDeployerAddress(makeAddr("something")); 49 } 50 51 function test_RevertWhen_InvalidTokenDeployerAddress() public { 52 vm.prank(deployer); 53 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenDeployerAddress.selector); 54 ownerTokenFactory.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 ownerTokenFactory.setTokenDeployerAddress(someAddress); 63 assertEq(ownerTokenFactory.tokenDeployer(), someAddress); 64 } 65 } 66 67 contract CreateTest is CommunityOwnerTokenFactoryTest { 68 event CreateToken(address indexed); 69 70 function setUp() public virtual override { 71 CommunityOwnerTokenFactoryTest.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 receiver = makeAddr("receiver"); 79 bytes memory signerPublicKey = bytes("some public key"); 80 81 vm.prank(makeAddr("notTokenDeployer")); 82 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_NotAuthorized.selector); 83 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 84 } 85 86 function test_RevertWhen_InvalidTokenMetadata() public { 87 string memory name = ""; 88 string memory symbol = ""; 89 string memory baseURI = ""; 90 address receiver = makeAddr("receiver"); 91 bytes memory signerPublicKey = bytes("some public key"); 92 93 vm.startPrank(address(tokenDeployer)); 94 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 95 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 96 97 baseURI = "http://test.dev"; 98 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 99 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 100 101 symbol = "TEST"; 102 vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector); 103 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 104 } 105 106 function test_RevertWhen_InvalidReceiverAddress() public { 107 string memory name = "TestToken"; 108 string memory symbol = "TEST"; 109 string memory baseURI = "http://test.dev"; 110 address receiver = address(0); 111 bytes memory signerPublicKey = bytes("some public key"); 112 113 vm.prank(address(tokenDeployer)); 114 vm.expectRevert(CommunityOwnerTokenFactory.CommunityOwnerTokenFactory_InvalidReceiverAddress.selector); 115 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 116 } 117 118 function test_RevertWhen_InvalidSignerPublicKey() public { 119 string memory name = "TestToken"; 120 string memory symbol = "TEST"; 121 string memory baseURI = "http://test.dev"; 122 address receiver = makeAddr("receiver"); 123 bytes memory signerPublicKey = bytes(""); 124 125 vm.prank(address(tokenDeployer)); 126 vm.expectRevert(CommunityOwnerTokenFactory.CommunityOwnerTokenFactory_InvalidSignerPublicKey.selector); 127 ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 128 } 129 130 function test_Create() public { 131 string memory name = "TestToken"; 132 string memory symbol = "TEST"; 133 string memory baseURI = "http://test.dev"; 134 address receiver = makeAddr("receiver"); 135 bytes memory signerPublicKey = bytes("some public key"); 136 137 vm.prank(address(tokenDeployer)); 138 vm.expectEmit(false, false, false, false); 139 emit CreateToken(makeAddr("some address")); 140 address ownerTokenAddress = ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey); 141 142 assertEq(OwnerToken(ownerTokenAddress).totalSupply(), 1); 143 assertEq(OwnerToken(ownerTokenAddress).maxSupply(), 1); 144 assertEq(OwnerToken(ownerTokenAddress).balanceOf(receiver), 1); 145 } 146 }