Skip to content

Commit

Permalink
Lock manager adapted tests - work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
brickpop committed Jan 22, 2025
1 parent c11c125 commit 4e6a4a8
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 33 deletions.
70 changes: 42 additions & 28 deletions test/LockManager.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -68,28 +68,28 @@ contract LockManagerTest is AragonTest {

function test_RevertWhen_ConstructorHasInvalidUnlockMode() external givenDeployingTheContract {
// It Should revert
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidUnlockMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode(uint8(2)), PluginMode.Approval),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidUnlockMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode(uint8(0)), PluginMode.Approval),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidUnlockMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode(uint8(2)), PluginMode.Voting),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidUnlockMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode(uint8(0)), PluginMode.Voting),
Expand Down Expand Up @@ -126,28 +126,28 @@ contract LockManagerTest is AragonTest {

function test_RevertWhen_ConstructorHasInvalidPluginMode() external givenDeployingTheContract {
// It Should revert
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPluginMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode.Strict, PluginMode(uint8(3))),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPluginMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode.Early, PluginMode(uint8(0))),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPluginMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode.Strict, PluginMode(uint8(3))),
IERC20(address(0)),
IERC20(address(0))
);
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPluginMode.selector));
vm.expectRevert();
new LockManager(
IDAO(address(0)),
LockManagerSettings(UnlockMode.Early, PluginMode(uint8(0))),
Expand Down Expand Up @@ -230,7 +230,7 @@ contract LockManagerTest is AragonTest {
underlyingToken
);
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPlugin.selector));
vm.expectRevert();
lockManager.setPluginAddress(LockToApprovePlugin(address(0x5555)));

// 2
Expand All @@ -241,7 +241,7 @@ contract LockManagerTest is AragonTest {
underlyingToken
);
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPlugin.selector));
vm.expectRevert();
lockManager.setPluginAddress(LockToApprovePlugin(address(0x5555)));
}

Expand All @@ -255,9 +255,11 @@ contract LockManagerTest is AragonTest {
lockableToken,
underlyingToken
);
assertEq(address(lockManager.plugin()), address(0));
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
LockToVotePlugin ltv = new LockToVotePlugin();
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPlugin.selector));
lockManager.setPluginAddress(new LockToVotePlugin());
lockManager.setPluginAddress(ltv);

// 2
lockManager = new LockManager(
Expand All @@ -266,9 +268,11 @@ contract LockManagerTest is AragonTest {
lockableToken,
underlyingToken
);
assertEq(address(lockManager.plugin()), address(0));
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
LockToApprovePlugin lta = new LockToApprovePlugin();
vm.expectRevert(abi.encodeWithSelector(LockManager.InvalidPlugin.selector));
lockManager.setPluginAddress(new LockToApprovePlugin());
lockManager.setPluginAddress(lta);

// ok
lockManager = new LockManager(
Expand All @@ -278,7 +282,16 @@ contract LockManagerTest is AragonTest {
underlyingToken
);
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
lockManager.setPluginAddress(new LockToApprovePlugin());
lockManager.setPluginAddress(lta);

lockManager = new LockManager(
dao,
LockManagerSettings(UnlockMode.Early, PluginMode.Voting),
lockableToken,
underlyingToken
);
dao.grant(address(lockManager), alice, lockManager.UPDATE_SETTINGS_PERMISSION_ID());
lockManager.setPluginAddress(ltv);
}

function test_RevertWhen_SetPluginAddressWithoutThePermission() external whenCallingSetPluginAddress {
Expand Down Expand Up @@ -439,9 +452,6 @@ contract LockManagerTest is AragonTest {
{
// It Should revert

Action[] memory _actions = new Action[](0);
proposalId = ltaPlugin.createProposal(bytes(""), _actions, 0, 0, bytes(""));

vm.startPrank(randomWallet);
assertEq(lockableToken.balanceOf(randomWallet), 0);
assertEq(lockableToken.allowance(randomWallet, address(lockManager)), 0);
Expand Down Expand Up @@ -472,9 +482,6 @@ contract LockManagerTest is AragonTest {
{
// It Should revert

Action[] memory _actions = new Action[](0);
proposalId = ltaPlugin.createProposal(bytes(""), _actions, 0, 0, bytes(""));

vm.startPrank(randomWallet);
assertEq(lockManager.lockedBalances(randomWallet), 0);

Expand Down Expand Up @@ -629,9 +636,6 @@ contract LockManagerTest is AragonTest {
{
// It Should revert

Action[] memory _actions = new Action[](0);
proposalId = ltaPlugin.createProposal(bytes(""), _actions, 0, 0, bytes(""));

// vm.startPrank(alice);
assertEq(lockManager.lockedBalances(alice), 0);
vm.expectRevert(NoBalance.selector);
Expand Down Expand Up @@ -989,7 +993,7 @@ contract LockManagerTest is AragonTest {
assertEq(lockableToken.balanceOf(alice), initialBalance - allowance);
assertEq(lockManager.lockedBalances(alice), 0.1 ether + allowance);
assertEq(lockableToken.balanceOf(address(lockManager)), 0.1 ether + allowance);
assertEq(ltaPlugin.usedVotingPower(proposalId, alice), 0.1 ether + allowance);
assertEq(ltvPlugin.usedVotingPower(proposalId, alice), 0.1 ether + allowance);
}

function test_WhenCallingLockAndVoteWithPriorPower4()
Expand All @@ -1015,7 +1019,7 @@ contract LockManagerTest is AragonTest {
assertEq(lockableToken.balanceOf(alice), initialBalance - allowance);
assertEq(lockManager.lockedBalances(alice), 0.1 ether + allowance);
assertEq(lockableToken.balanceOf(address(lockManager)), 0.1 ether + allowance);
assertEq(ltaPlugin.usedVotingPower(proposalId, alice), 0.1 ether + allowance);
assertEq(ltvPlugin.usedVotingPower(proposalId, alice), 0.1 ether + allowance);
}

function test_RevertWhen_CallingVoteSameBalance4()
Expand Down Expand Up @@ -1053,7 +1057,7 @@ contract LockManagerTest is AragonTest {
assertEq(lockableToken.balanceOf(alice), initialBalance - 0.5 ether);
assertEq(lockManager.lockedBalances(alice), 0.6 ether);
lockManager.vote(proposalId, IMajorityVoting.VoteOption.Yes);
assertEq(ltaPlugin.usedVotingPower(proposalId, alice), 0.6 ether);
assertEq(ltvPlugin.usedVotingPower(proposalId, alice), 0.6 ether);
}

modifier givenCallingLockLockAndApproveOrLockAndVote() {
Expand Down Expand Up @@ -1229,7 +1233,12 @@ contract LockManagerTest is AragonTest {
_;
}

function test_WhenTryingToUnlock2ApprovalStrict() external givenProposalOnLockToApprove givenStrictModeIsSet givenLockedButDidntApproveAnywhereStrict {
function test_WhenTryingToUnlock2ApprovalStrict()
external
givenProposalOnLockToApprove
givenStrictModeIsSet
givenLockedButDidntApproveAnywhereStrict
{
// It Should unlock and refund the full amount right away
// It Should emit an event

Expand All @@ -1248,7 +1257,12 @@ contract LockManagerTest is AragonTest {
_;
}

function test_WhenTryingToUnlock2VotingStrict() external givenProposalOnLockToVote givenStrictModeIsSet givenLockedButDidntVoteAnywhereStrict {
function test_WhenTryingToUnlock2VotingStrict()
external
givenProposalOnLockToVote
givenStrictModeIsSet
givenLockedButDidntVoteAnywhereStrict
{
// It Should unlock and refund the full amount right away
// It Should emit an event

Expand Down Expand Up @@ -1385,7 +1399,7 @@ contract LockManagerTest is AragonTest {
function test_RevertWhen_TryingToUnlock1Flexible() external givenFlexibleModeIsSet givenDidntLockAnythingFlexible {
// It Should revert

(UnlockMode mode,) = lockManager.settings();
(UnlockMode mode, ) = lockManager.settings();
assertEq(uint8(mode), uint8(UnlockMode.Early));

// vm.startPrank(alice);
Expand Down
15 changes: 10 additions & 5 deletions test/util/DaoBuilder.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {LockToApprovePlugin} from "../../src/LockToApprovePlugin.sol";
import {LockToVotePlugin, MajorityVotingBase} from "../../src/LockToVotePlugin.sol";
import {LockManager} from "../../src/LockManager.sol";
import {LockManagerSettings, UnlockMode, PluginMode} from "../../src/interfaces/ILockManager.sol";
import {ILockToVoteBase} from "../../src/interfaces/ILockToVoteBase.sol";
import {RATIO_BASE} from "@aragon/osx-commons-contracts/src/utils/math/Ratio.sol";
import {IPlugin} from "@aragon/osx-commons-contracts/src/plugin/IPlugin.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
Expand Down Expand Up @@ -137,6 +138,8 @@ contract DaoBuilder is Test {
TestToken(address(lockableToken)).mint(owner, 10 ether);
}

ILockToVoteBase targetPlugin;

{
// Plugin and helper

Expand Down Expand Up @@ -169,6 +172,7 @@ contract DaoBuilder is Test {
)
)
);
targetPlugin = ILockToVoteBase(address(ltaPlugin));
} else {
MajorityVotingBase.VotingSettings memory votingSettings = MajorityVotingBase.VotingSettings({
votingMode: votingMode,
Expand All @@ -188,26 +192,27 @@ contract DaoBuilder is Test {
)
)
);
targetPlugin = ILockToVoteBase(address(ltvPlugin));
}

dao.grant(address(lockManager), address(this), lockManager.UPDATE_SETTINGS_PERMISSION_ID());
lockManager.setPluginAddress(ltaPlugin);
lockManager.setPluginAddress(targetPlugin);
dao.revoke(address(lockManager), address(this), lockManager.UPDATE_SETTINGS_PERMISSION_ID());
}

// The plugin can execute on the DAO
dao.grant(address(dao), address(ltaPlugin), dao.EXECUTE_PERMISSION_ID());
dao.grant(address(dao), address(targetPlugin), dao.EXECUTE_PERMISSION_ID());

// The LockManager can manage the plugin
dao.grant(address(ltaPlugin), address(lockManager), ltaPlugin.LOCK_MANAGER_PERMISSION_ID());
dao.grant(address(targetPlugin), address(lockManager), LockToApprovePlugin(address(targetPlugin)).LOCK_MANAGER_PERMISSION_ID());

if (proposers.length > 0) {
for (uint256 i = 0; i < proposers.length; i++) {
dao.grant(address(ltaPlugin), proposers[i], ltaPlugin.CREATE_PROPOSAL_PERMISSION_ID());
dao.grant(address(targetPlugin), proposers[i], LockToApprovePlugin(address(targetPlugin)).CREATE_PROPOSAL_PERMISSION_ID());
}
} else {
// Ensure that at least the owner can propose
dao.grant(address(ltaPlugin), owner, ltaPlugin.CREATE_PROPOSAL_PERMISSION_ID());
dao.grant(address(targetPlugin), owner, LockToApprovePlugin(address(targetPlugin)).CREATE_PROPOSAL_PERMISSION_ID());
}

// Transfer ownership to the owner
Expand Down

0 comments on commit 4e6a4a8

Please sign in to comment.