Skip to content

Commit 854f0f1

Browse files
committed
add TokenTransferTest contract to validate token transfer functionality
1 parent a4df58f commit 854f0f1

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity 0.8.26;
3+
4+
import {Test} from "forge-std/Test.sol";
5+
import {AmoyTokenTransfer} from "src/AmoyTokenTransfer.sol";
6+
import {CCIPLocalSimulator, IRouterClient, LinkToken, BurnMintERC677Helper} from "@chainlink/local/src/ccip/CCIPLocalSimulator.sol";
7+
import {TokenReceiverMock} from "test/no-fork/mocks/TokenReceiverMock.sol";
8+
9+
contract TokenTransferTest is Test {
10+
CCIPLocalSimulator public ccipLocalSimulator;
11+
uint64 public destinationChainSelector;
12+
AmoyTokenTransfer public amoyTokenTransfer;
13+
TokenReceiverMock public tokenReceiverMock;
14+
BurnMintERC677Helper public CCIPBnM;
15+
16+
uint256 constant AMOUNT_LINK_REQUEST = 20 ether;
17+
uint256 constant AMOUNT_CCIPBNM = 1e18;
18+
19+
address public USER = makeAddr("USER");
20+
21+
function setUp() public {
22+
ccipLocalSimulator = new CCIPLocalSimulator();
23+
(
24+
uint64 chainSelector,
25+
IRouterClient sourceRouter,
26+
,
27+
,
28+
LinkToken linkToken,
29+
BurnMintERC677Helper ccipBnM,
30+
31+
) = ccipLocalSimulator.configuration();
32+
33+
destinationChainSelector = chainSelector;
34+
CCIPBnM = ccipBnM;
35+
36+
amoyTokenTransfer = new AmoyTokenTransfer(
37+
address(sourceRouter),
38+
address(linkToken)
39+
);
40+
41+
tokenReceiverMock = new TokenReceiverMock();
42+
deal(address(CCIPBnM), USER, AMOUNT_CCIPBNM);
43+
}
44+
45+
function testTransferTokenSuccess() public {
46+
ccipLocalSimulator.requestLinkFromFaucet(
47+
address(amoyTokenTransfer),
48+
AMOUNT_LINK_REQUEST
49+
);
50+
51+
vm.startPrank(USER);
52+
CCIPBnM.approve(address(amoyTokenTransfer), AMOUNT_CCIPBNM);
53+
CCIPBnM.transfer(address(amoyTokenTransfer), AMOUNT_CCIPBNM);
54+
vm.stopPrank();
55+
56+
amoyTokenTransfer.transferTokensPayLINK(
57+
destinationChainSelector,
58+
address(tokenReceiverMock),
59+
address(CCIPBnM),
60+
AMOUNT_CCIPBNM
61+
);
62+
63+
assertEq(CCIPBnM.balanceOf(address(tokenReceiverMock)), AMOUNT_CCIPBNM);
64+
assertEq(CCIPBnM.balanceOf(address(amoyTokenTransfer)), 0);
65+
assertEq(CCIPBnM.balanceOf(USER), 0);
66+
}
67+
}

0 commit comments

Comments
 (0)