Files
smom-dbis-138/test/treasury/TreasuryVault.t.sol
2026-03-02 12:14:09 -08:00

59 lines
1.9 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {TreasuryVault} from "../../contracts/treasury/TreasuryVault.sol";
contract MockERC20 {
mapping(address => uint256) public balanceOf;
function mint(address to, uint256 amount) external {
balanceOf[to] += amount;
}
function transfer(address to, uint256 amount) external returns (bool) {
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
return true;
}
function transferFrom(address from, address to, uint256 amount) external returns (bool) {
balanceOf[from] -= amount;
balanceOf[to] += amount;
return true;
}
function approve(address, uint256) external pure returns (bool) { return true; }
}
contract TreasuryVaultTest is Test {
TreasuryVault vault;
MockERC20 token;
address admin = address(1);
address module1 = address(2);
address module2 = address(3);
function setUp() public {
vault = new TreasuryVault(admin);
token = new MockERC20();
token.mint(address(vault), 1000000e18);
vm.prank(admin);
vault.setToken(address(token), true);
vm.prank(admin);
vault.setModule(module1, true);
vm.prank(admin);
vault.setModule(module2, true);
}
function test_requestTransfer_success() public {
token.mint(address(vault), 100e18);
vm.prank(module1);
vault.requestTransfer(address(token), 50e18, module2);
assertEq(token.balanceOf(module2), 50e18);
}
function test_requestTransfer_revert_tokenNotApproved() public {
MockERC20 other = new MockERC20();
other.mint(address(vault), 100e18);
vm.prank(module1);
vm.expectRevert(TreasuryVault.TokenNotApproved.selector);
vault.requestTransfer(address(other), 50e18, module2);
}
}