communities-contracts/test/CommunityOwnerTokenFactory....

147 lines
5.8 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 { CommunityOwnerTokenFactory } from "../contracts/factories/CommunityOwnerTokenFactory.sol";
import { OwnerToken } from "../contracts/tokens/OwnerToken.sol";
import { CommunityTokenDeployer } from "../contracts/CommunityTokenDeployer.sol";
contract CommunityOwnerTokenFactoryTest is Test {
DeploymentConfig internal deploymentConfig;
address internal deployer;
CommunityTokenDeployer internal tokenDeployer;
CommunityOwnerTokenFactory internal ownerTokenFactory;
function setUp() public virtual {
DeployContracts deployment = new DeployContracts();
(tokenDeployer,, ownerTokenFactory,, deploymentConfig) = deployment.run();
deployer = deploymentConfig.deployer();
}
}
contract DeploymentTest is CommunityOwnerTokenFactoryTest {
function setUp() public virtual override {
CommunityOwnerTokenFactoryTest.setUp();
}
function test_Deployment() public {
assertEq(ownerTokenFactory.owner(), deployer);
assertEq(ownerTokenFactory.tokenDeployer(), address(tokenDeployer));
}
}
contract SetTokenDeployerAddressTest is CommunityOwnerTokenFactoryTest {
event TokenDeployerAddressChange(address indexed);
function setUp() public virtual override {
CommunityOwnerTokenFactoryTest.setUp();
}
function test_RevertWhen_SenderIsNotOwner() public {
vm.expectRevert(bytes("Ownable: caller is not the owner"));
ownerTokenFactory.setTokenDeployerAddress(makeAddr("something"));
}
function test_RevertWhen_InvalidTokenDeployerAddress() public {
vm.prank(deployer);
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenDeployerAddress.selector);
ownerTokenFactory.setTokenDeployerAddress(address(0));
}
function test_SetTokenDeployerAddress() public {
address someAddress = makeAddr("someAddress");
vm.prank(deployer);
vm.expectEmit(true, true, true, true);
emit TokenDeployerAddressChange(someAddress);
ownerTokenFactory.setTokenDeployerAddress(someAddress);
assertEq(ownerTokenFactory.tokenDeployer(), someAddress);
}
}
contract CreateTest is CommunityOwnerTokenFactoryTest {
event CreateToken(address indexed);
function setUp() public virtual override {
CommunityOwnerTokenFactoryTest.setUp();
}
function test_RevertWhen_SenderIsNotTokenDeployer() public {
string memory name = "TestToken";
string memory symbol = "TEST";
string memory baseURI = "http://test.dev";
address receiver = makeAddr("receiver");
bytes memory signerPublicKey = bytes("some public key");
vm.prank(makeAddr("notTokenDeployer"));
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_NotAuthorized.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
}
function test_RevertWhen_InvalidTokenMetadata() public {
string memory name = "";
string memory symbol = "";
string memory baseURI = "";
address receiver = makeAddr("receiver");
bytes memory signerPublicKey = bytes("some public key");
vm.startPrank(address(tokenDeployer));
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
baseURI = "http://test.dev";
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
symbol = "TEST";
vm.expectRevert(BaseTokenFactory.BaseTokenFactory_InvalidTokenMetadata.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
}
function test_RevertWhen_InvalidReceiverAddress() public {
string memory name = "TestToken";
string memory symbol = "TEST";
string memory baseURI = "http://test.dev";
address receiver = address(0);
bytes memory signerPublicKey = bytes("some public key");
vm.prank(address(tokenDeployer));
vm.expectRevert(CommunityOwnerTokenFactory.CommunityOwnerTokenFactory_InvalidReceiverAddress.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
}
function test_RevertWhen_InvalidSignerPublicKey() public {
string memory name = "TestToken";
string memory symbol = "TEST";
string memory baseURI = "http://test.dev";
address receiver = makeAddr("receiver");
bytes memory signerPublicKey = bytes("");
vm.prank(address(tokenDeployer));
vm.expectRevert(CommunityOwnerTokenFactory.CommunityOwnerTokenFactory_InvalidSignerPublicKey.selector);
ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
}
function test_Create() public {
string memory name = "TestToken";
string memory symbol = "TEST";
string memory baseURI = "http://test.dev";
address receiver = makeAddr("receiver");
bytes memory signerPublicKey = bytes("some public key");
vm.prank(address(tokenDeployer));
vm.expectEmit(false, false, false, false);
emit CreateToken(makeAddr("some address"));
address ownerTokenAddress = ownerTokenFactory.create(name, symbol, baseURI, receiver, signerPublicKey);
assertEq(OwnerToken(ownerTokenAddress).totalSupply(), 1);
assertEq(OwnerToken(ownerTokenAddress).maxSupply(), 1);
assertEq(OwnerToken(ownerTokenAddress).balanceOf(receiver), 1);
}
}