Some checks failed
CI/CD Pipeline / Solidity Contracts (push) Failing after 1m42s
CI/CD Pipeline / Security Scanning (push) Successful in 2m18s
CI/CD Pipeline / Lint and Format (push) Failing after 37s
CI/CD Pipeline / Terraform Validation (push) Failing after 21s
CI/CD Pipeline / Kubernetes Validation (push) Successful in 21s
Validation / validate-genesis (push) Successful in 25s
Validation / validate-terraform (push) Failing after 23s
Validation / validate-kubernetes (push) Failing after 8s
Validation / validate-smart-contracts (push) Failing after 8s
Validation / validate-security (push) Failing after 1m12s
Validation / validate-documentation (push) Failing after 15s
Aligns LiXAU fixture with on-chain validateProduct() and unblocks GRU audit suite. Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
2.2 KiB
Solidity
73 lines
2.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import "forge-std/Test.sol";
|
|
import "../../contracts/rwa/RWAToken.sol";
|
|
import "../../contracts/rwa/GruMonetaryPolicyGate.sol";
|
|
import "../../contracts/rwa/IGruMonetaryPolicyGate.sol";
|
|
|
|
contract GruMonetaryPolicyGateTest is Test {
|
|
GruMonetaryPolicyGate gate;
|
|
RWAToken liToken;
|
|
address admin = address(0xA11CE);
|
|
|
|
function setUp() public {
|
|
vm.startPrank(admin);
|
|
gate = new GruMonetaryPolicyGate(admin, 12000, 11800, 25);
|
|
liToken = new RWAToken(
|
|
"LiXAU Test",
|
|
"LiXAU",
|
|
6,
|
|
"LiXAU",
|
|
"Commodities",
|
|
"Gold",
|
|
"Index",
|
|
"XAU",
|
|
"M00",
|
|
admin,
|
|
admin,
|
|
admin,
|
|
1_000_000,
|
|
0,
|
|
keccak256("methodology-test")
|
|
);
|
|
gate.setTokenGate(address(liToken), true);
|
|
liToken.setPolicyGate(address(gate));
|
|
vm.stopPrank();
|
|
}
|
|
|
|
function test_AllowsMintWhenGreen() public {
|
|
vm.prank(admin);
|
|
gate.updateMetrics(15000, 10, IGruMonetaryPolicyGate.VelocityZone.Green, false);
|
|
vm.prank(admin);
|
|
liToken.mint(admin, 1000e6);
|
|
assertEq(liToken.totalSupply(), 1000e6);
|
|
}
|
|
|
|
function test_BlocksMintOnCoverageAlert() public {
|
|
vm.prank(admin);
|
|
gate.updateMetrics(11700, 10, IGruMonetaryPolicyGate.VelocityZone.Green, false);
|
|
vm.prank(admin);
|
|
vm.expectRevert("RWAToken: policy gate");
|
|
liToken.mint(admin, 1000e6);
|
|
}
|
|
|
|
function test_BlocksMintOnUtilization() public {
|
|
vm.prank(admin);
|
|
gate.updateMetrics(15000, 30, IGruMonetaryPolicyGate.VelocityZone.Green, false);
|
|
vm.prank(admin);
|
|
vm.expectRevert("RWAToken: policy gate");
|
|
liToken.mint(admin, 1000e6);
|
|
}
|
|
|
|
function test_SkipGateWhenTokenNotEnabled() public {
|
|
vm.prank(admin);
|
|
gate.setTokenGate(address(liToken), false);
|
|
vm.prank(admin);
|
|
gate.updateMetrics(10000, 99, IGruMonetaryPolicyGate.VelocityZone.Red, true);
|
|
vm.prank(admin);
|
|
liToken.mint(admin, 1000e6);
|
|
assertEq(liToken.totalSupply(), 1000e6);
|
|
}
|
|
}
|