Files
smom-dbis-138/test/compliance/CompliantMonetaryUnitTokenTest.t.sol

55 lines
1.6 KiB
Solidity
Raw Normal View History

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {CompliantBTC} from "../../contracts/tokens/CompliantBTC.sol";
contract CompliantMonetaryUnitTokenTest is Test {
CompliantBTC public token;
address public owner;
address public admin;
address public user1;
function setUp() public {
owner = address(this);
admin = address(this);
user1 = address(0xB0B);
token = new CompliantBTC(owner, admin, 21_000_000 * 10**8);
}
function testDecimals() public view {
assertEq(token.decimals(), 8);
}
function testUnitCode() public view {
assertEq(token.unitCode(), "BTC");
assertTrue(token.isMonetaryUnit());
}
function testInitialSupplyUsesSatoshiPrecision() public view {
assertEq(token.totalSupply(), 21_000_000 * 10**8);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8);
}
function testTransferUsesEightDecimals() public {
uint256 amount = 12_500_000;
token.transfer(user1, amount);
assertEq(token.balanceOf(user1), amount);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8 - amount);
}
function testPauseBlocksTransfers() public {
token.pause();
assertTrue(token.paused());
vm.expectRevert();
token.transfer(user1, 100_000_000);
}
function testMintAndBurnUseSatoshiPrecision() public {
token.mint(user1, 250_000_000);
assertEq(token.balanceOf(user1), 250_000_000);
token.burn(100_000_000);
assertEq(token.balanceOf(owner), 21_000_000 * 10**8 - 100_000_000);
}
}