// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; import "forge-std/Test.sol"; import {Main} from "../src/Main.sol"; import {Unaboomer} from "../src/Unaboomer.sol"; import {Mailbomb} from "../src/Mailbomb.sol"; contract UnaboomerTest is Test { Main public main; Unaboomer public boomr; Mailbomb public bomb; uint256 unaboomerPrice; uint256 bombPrice; function setUp() public { main = new Main(); boomr = new Unaboomer(); bomb = new Mailbomb(); boomr.setMainContract(address(main)); bomb.setMainContract(address(main)); main.setUnaboomerContract(address(boomr)); main.setMailbombContract(address(bomb)); unaboomerPrice = main.unaboomerPrice(); bombPrice = main.bombPrice(); } // ensure only Main can mint/burn/kill function testOnlyMain() public { address t = address(1); startHoax(t); vm.expectRevert(bytes("invalid msg sender")); boomr.radicalize(t, 10); vm.expectRevert(bytes("invalid msg sender")); boomr.die(1); vm.expectRevert(bytes("invalid msg sender")); bomb.create(t, 10); vm.expectRevert(bytes("invalid msg sender")); bomb.explode(t, 10); assertEq(boomr.totalSupply() == 0, true); } // ensure killing increments leaderboard function testLeaderboard() public { address victim = address(1); address killer = address(2); uint256 amt = 20; hoax(victim); main.radicalizeBoomers{value: unaboomerPrice * amt}(amt); startHoax(killer); main.assembleBombs{value: bombPrice * amt}(amt); main.sendBombs(3); main.sendBombs(3); main.sendBombs(3); main.sendBombs(3); main.sendBombs(3); assertEq(main.leaderboard(main.leaderboardPointer()), killer); assertEq(main.unaboomersKilled() > 0, true); console.log(main.killCount(killer)); } // ensure killing toggles URI // ensure sending bombs burns bombs // ensure supply limits enforced // ensure survivor limit enforced // ensure only owners can withdraw funds // ensure withdraw function actuall works // function testURILogic() public { // address t = address(1); // boomr.setAliveURI('ipfs://alive/'); // boomr.setDeadURI('ipfs://dead/'); // startHoax(t); // main.radicalizeBoomers{value: .01 ether}(1); // assertEq(boomr.tokenURI(0), 'ipfs://alive/0.json'); // main.sendBombs(1); // assertEq(boomr.tokenURI(0), 'ipfs://dead/0.json'); // } }