137 lines
5.5 KiB
Solidity
137 lines
5.5 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity ^0.8.17;
|
|
|
|
import { Test } from "forge-std/Test.sol";
|
|
import { DeployContracts } from "../script/DeployContracts.s.sol";
|
|
import { DeploymentConfig } from "../script/DeploymentConfig.s.sol";
|
|
import { BaseTokenFactory } from "../contracts/factories/BaseTokenFactory.sol";
|
|
import { CommunityMasterTokenFactory } from "../contracts/factories/CommunityMasterTokenFactory.sol";
|
|
import { MasterToken } from "../contracts/tokens/MasterToken.sol";
|
|
import { CommunityTokenDeployer } from "../contracts/CommunityTokenDeployer.sol";
|
|
|
|
contract CommunityMasterTokenFactoryTest is Test {
|
|
DeploymentConfig internal deploymentConfig;
|
|
|
|
address internal deployer;
|
|
|
|
CommunityTokenDeployer internal tokenDeployer;
|
|
|
|
CommunityMasterTokenFactory internal masterTokenFactory;
|
|
|
|
function setUp() public virtual {
|
|
DeployContracts deployment = new DeployContracts();
|
|
(tokenDeployer,,, masterTokenFactory, deploymentConfig) = deployment.run();
|
|
deployer = deploymentConfig.deployer();
|
|
}
|
|
}
|
|
|
|
contract DeploymentTest is CommunityMasterTokenFactoryTest {
|
|
function setUp() public virtual override {
|
|
CommunityMasterTokenFactoryTest.setUp();
|
|
}
|
|
|
|
function test_Deployment() public {
|
|
assertEq(masterTokenFactory.owner(), deployer);
|
|
assertEq(masterTokenFactory.tokenDeployer(), address(tokenDeployer));
|
|
}
|
|
}
|
|
|
|
contract SetTokenDeployerAddressTest is CommunityMasterTokenFactoryTest {
|
|
event TokenDeployerAddressChange(address indexed);
|
|
|
|
function setUp() public virtual override {
|
|
CommunityMasterTokenFactoryTest.setUp();
|
|
}
|
|
|
|
function test_RevertWhen_SenderIsNotOwner() public {
|
|
vm.expectRevert(bytes("Ownable: caller is not the owner"));
|
|
masterTokenFactory.setTokenDeployerAddress(makeAddr("something"));
|
|
}
|
|
|
|
function test_RevertWhen_InvalidTokenDeployerAddress() public {
|
|
vm.prank(deployer);
|
|
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenDeployerAddress.selector);
|
|
masterTokenFactory.setTokenDeployerAddress(address(0));
|
|
}
|
|
|
|
function test_SetTokenDeployerAddress() public {
|
|
address someAddress = makeAddr("someAddress");
|
|
vm.prank(deployer);
|
|
vm.expectEmit(true, true, true, true);
|
|
emit TokenDeployerAddressChange(someAddress);
|
|
masterTokenFactory.setTokenDeployerAddress(someAddress);
|
|
assertEq(masterTokenFactory.tokenDeployer(), someAddress);
|
|
}
|
|
}
|
|
|
|
contract CreateTest is CommunityMasterTokenFactoryTest {
|
|
event CreateToken(address indexed);
|
|
|
|
function setUp() public virtual override {
|
|
CommunityMasterTokenFactoryTest.setUp();
|
|
}
|
|
|
|
function test_RevertWhen_SenderIsNotTokenDeployer() public {
|
|
string memory name = "TestToken";
|
|
string memory symbol = "TEST";
|
|
string memory baseURI = "http://test.dev";
|
|
address ownerToken = makeAddr("ownerToken");
|
|
bytes memory signerPublicKey = bytes("");
|
|
|
|
vm.prank(makeAddr("notTokenDeployer"));
|
|
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_NotAuthorized.selector);
|
|
masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
}
|
|
|
|
function test_RevertWhen_InvalidTokenMetadata() public {
|
|
string memory name = "";
|
|
string memory symbol = "";
|
|
string memory baseURI = "";
|
|
address ownerToken = makeAddr("ownerToken");
|
|
bytes memory signerPublicKey = bytes("");
|
|
|
|
vm.startPrank(address(tokenDeployer));
|
|
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
|
|
masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
|
|
baseURI = "http://test.dev";
|
|
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
|
|
masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
|
|
symbol = "TEST";
|
|
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
|
|
masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
}
|
|
|
|
function test_RevertWhen_InvalidOwnerTokenAddress() public {
|
|
string memory name = "TestToken";
|
|
string memory symbol = "TEST";
|
|
string memory baseURI = "http://test.dev";
|
|
address ownerToken = address(0);
|
|
bytes memory signerPublicKey = bytes("");
|
|
|
|
vm.prank(address(tokenDeployer));
|
|
vm.expectRevert(CommunityMasterTokenFactory.CommunityMasterTokenFactory_InvalidOwnerTokenAddress.selector);
|
|
masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
}
|
|
|
|
function test_Create() public {
|
|
string memory name = "TestToken";
|
|
string memory symbol = "TEST";
|
|
string memory baseURI = "http://test.dev";
|
|
address ownerToken = makeAddr("ownerToken");
|
|
bytes memory signerPublicKey = bytes("some public key");
|
|
|
|
vm.prank(address(tokenDeployer));
|
|
vm.expectEmit(false, false, false, false);
|
|
emit CreateToken(makeAddr("some address"));
|
|
address masterTokenAddress = masterTokenFactory.create(name, symbol, baseURI, ownerToken, signerPublicKey);
|
|
|
|
assertEq(MasterToken(masterTokenAddress).totalSupply(), 0);
|
|
assertEq(MasterToken(masterTokenAddress).maxSupply(), type(uint256).max);
|
|
assertEq(MasterToken(masterTokenAddress).transferable(), false);
|
|
assertEq(MasterToken(masterTokenAddress).remoteBurnable(), true);
|
|
assertEq(MasterToken(masterTokenAddress).ownerToken(), ownerToken);
|
|
}
|
|
}
|