pragma solidity ^0.8.28;
import {Test, console} from "../../lib/forge-std/src/Test.sol";
import {GaugeController, IGaugeController} from "../../contracts/core/governance/gauges/GaugeController.sol";
import "../../contracts/interfaces/core/governance/gauges/IGaugeController.sol";
import {RAACGauge} from "../../contracts/core/governance/gauges/RAACGauge.sol";
import {RWAGauge} from "../../contracts/core/governance/gauges/RWAGauge.sol";
import {ERC20Mock} from "../../contracts/mocks/core/tokens/ERC20Mock.sol";
import {MockVeToken} from "../../contracts/mocks/core/tokens/MockVeToken.sol";
contract GaugesTest is Test {
GaugeController public controller;
MockVeToken public veRAACToken;
ERC20Mock public rewardToken;
ERC20Mock public stakingToken;
RAACGauge public raacGauge;
RWAGauge public rwaGauge;
address public admin = address(0x1);
address public alice = address(0x2);
address public bob = address(0x3);
address public carol = address(0x4);
uint256 public constant WEIGHT_PRECISION = 10000;
uint256 public constant VOTE_DELAY = 10 days;
event WeightUpdated(address indexed gauge, uint256 oldWeight, uint256 newWeight);
event GaugeAdded(address indexed gauge, uint8 indexed gaugeType);
function setUp() public {
veRAACToken = new MockVeToken();
rewardToken = new ERC20Mock("RewardToken", "RWD");
stakingToken = new ERC20Mock("StakingToken", "STK");
vm.startPrank(admin);
controller = new GaugeController(address(veRAACToken));
vm.stopPrank();
raacGauge = new RAACGauge(address(rewardToken), address(stakingToken), address(controller));
rwaGauge = new RWAGauge(address(rewardToken), address(stakingToken), address(controller));
veRAACToken.mint(alice, 1000e18);
veRAACToken.mint(bob, 500e18);
veRAACToken.mint(carol, 250e18);
}
function test_AddGauge() public {
vm.startPrank(admin);
controller.addGauge(address(raacGauge), IGaugeController.GaugeType.RAAC, 100);
vm.stopPrank();
assertTrue(controller.isGauge(address(raacGauge)));
assertEq(controller.getGaugeWeight(address(raacGauge)), 100);
}
function test_VoteWithoutDelay() public {
test_AddGauge();
vm.startPrank(alice);
controller.vote(address(raacGauge), 5000);
controller.vote(address(raacGauge), 3000);
controller.vote(address(raacGauge), 7000);
vm.stopPrank();
assertEq(controller.userGaugeVotes(alice, address(raacGauge)), 7000);
}
}