-
Notifications
You must be signed in to change notification settings - Fork 0
/
Router.t.sol
61 lines (51 loc) · 1.77 KB
/
Router.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
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {Test} from "forge-std/Test.sol";
import {Router} from "src/Router.sol";
import {RouterRegistry} from "src/RouterRegistry.sol";
import {EncodeTxs, Transaction, Operation} from "test/helpers/EncodeTx.sol";
contract Emitter {
event Ping(string);
function ping() external {
emit Ping("Ping");
}
}
contract RouterTest is EncodeTxs, Emitter, Test {
RouterRegistry internal deployer = new RouterRegistry();
address owner = address(2);
Router internal router;
Transaction[] internal txs;
function setUp() public {
deployer.createRouter(owner);
router = Router(payable(deployer.routerFor(owner)));
}
function test_owner() public {
vm.prank(owner, owner);
router.multiSend("");
}
function test_RevertsWhenNotowner() public {
vm.prank(address(3));
vm.expectRevert();
router.multiSend("");
}
function test_ExecuteTransfer() public {
vm.deal(owner, 1 ether);
txs.push(Transaction(address(4), 1, hex"", Operation.Call));
vm.prank(owner, owner);
router.multiSend{value: 1}(encode(txs));
assertEq(address(4).balance, 1);
}
function test_ExecuteMultipleTransfer() public {
vm.deal(owner, 1 ether);
txs.push(Transaction(address(4), 1, hex"", Operation.Call));
txs.push(Transaction(address(4), 1, hex"", Operation.Call));
vm.prank(owner, owner);
router.multiSend{value: 2}(encode(txs));
assertEq(address(4).balance, 2);
}
function test_EncodedCall() public {
txs.push(Transaction(address(this), 0, abi.encodeCall(Emitter.ping, ()), Operation.Call));
vm.prank(owner, owner);
router.multiSend(encode(txs));
}
}