-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathUpgradeableOwnableWithGuardian.t.sol
67 lines (53 loc) · 2.11 KB
/
UpgradeableOwnableWithGuardian.t.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import 'forge-std/Test.sol';
import {UpgradeableOwnableWithGuardian, IWithGuardian} from '../src/contracts/access-control/UpgradeableOwnableWithGuardian.sol';
contract ImplOwnableWithGuardian is UpgradeableOwnableWithGuardian {
function initialize(address owner, address guardian) public initializer {
__Ownable_init(owner);
__Ownable_With_Guardian_init(guardian);
}
function mock_onlyGuardian() external onlyGuardian {}
function mock_onlyOwnerOrGuardian() external onlyOwnerOrGuardian {}
}
contract TestOfUpgradableOwnableWithGuardian is Test {
UpgradeableOwnableWithGuardian public withGuardian;
address owner = address(0x4);
address guardian = address(0x8);
function setUp() public {
withGuardian = new ImplOwnableWithGuardian();
ImplOwnableWithGuardian(address(withGuardian)).initialize(owner, guardian);
}
function test_initializer() external {
assertEq(withGuardian.owner(), owner);
assertEq(withGuardian.guardian(), guardian);
}
function test_onlyGuardian() external {
vm.expectRevert(
abi.encodeWithSelector(IWithGuardian.OnlyGuardianInvalidCaller.selector, address(this))
);
ImplOwnableWithGuardian(address(withGuardian)).mock_onlyGuardian();
}
function test_onlyOwnerOrGuardian() external {
vm.expectRevert(
abi.encodeWithSelector(IWithGuardian.OnlyGuardianOrOwnerInvalidCaller.selector, address(this))
);
ImplOwnableWithGuardian(address(withGuardian)).mock_onlyOwnerOrGuardian();
}
function test_updateGuardian_guardian(address newGuardian) external {
vm.prank(guardian);
withGuardian.updateGuardian(newGuardian);
}
function test_updateGuardian_owner(address newGuardian) external {
vm.prank(owner);
withGuardian.updateGuardian(newGuardian);
}
function test_updateGuardian_eoa(address eoa, address newGuardian) external {
vm.assume(eoa != owner && eoa != guardian);
vm.prank(eoa);
vm.expectRevert(
abi.encodeWithSelector(IWithGuardian.OnlyGuardianOrOwnerInvalidCaller.selector, eoa)
);
withGuardian.updateGuardian(newGuardian);
}
}