|
2 | 2 | pragma solidity 0.8.30; |
3 | 3 |
|
4 | 4 | import {ERC20Mock} from "@openzeppelin/contracts/mocks/token/ERC20Mock.sol"; |
| 5 | +import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; |
5 | 6 | import {FullTicketData} from "@ticket-storage/FactoryStorage.sol"; |
6 | 7 | import {FeeType} from "@ticket-storage/MarketplaceStorage.sol"; |
7 | 8 | import {DeployedHostItTickets} from "@ticket-test/states/DeployedHostItTickets.sol"; |
8 | 9 | import {ITicket} from "@ticket/interfaces/ITicket.sol"; |
9 | 10 | /// forge-lint: disable-next-line(unaliased-plain-import) |
10 | 11 | import "@ticket-logs/MarketplaceLogs.sol"; |
11 | 12 |
|
12 | | -contract MarketplaceTest is DeployedHostItTickets { |
| 13 | +contract MarketplaceTest is DeployedHostItTickets, ERC721Holder { |
13 | 14 | function test_mintFreeTicket() public { |
14 | 15 | vm.prank(alice); |
15 | 16 | (uint64 ticketId, uint40 tokenId) = _mintTicketFree(); |
@@ -58,6 +59,72 @@ contract MarketplaceTest is DeployedHostItTickets { |
58 | 59 | assertEq(marketplaceFacet.getTicketFee(ticketId, FeeType.USDC), _getFees()[2]); |
59 | 60 | } |
60 | 61 |
|
| 62 | + function test_claimRefundETH() public { |
| 63 | + (uint64 ticketId, uint40 tokenId, uint256 ethFee, uint256 hostItFee) = _mintTicketETH(); |
| 64 | + FullTicketData memory fullTicketData = factoryFacet.ticketData(ticketId); |
| 65 | + ITicket ticket = ITicket(fullTicketData.ticketAddress); |
| 66 | + assertEq(ticket.ownerOf(tokenId), alice); |
| 67 | + assertEq(fullTicketData.soldTickets, 1); |
| 68 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.ETH), ethFee); |
| 69 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.ETH), hostItFee); |
| 70 | + vm.prank(alice); |
| 71 | + ticket.approve(hostIt, tokenId); |
| 72 | + vm.prank(alice); |
| 73 | + vm.warp(fullTicketData.endTime); |
| 74 | + vm.expectEmit(true, true, true, true, hostIt); |
| 75 | + emit TicketRefunded(ticketId, FeeType.ETH, ethFee, bob); |
| 76 | + marketplaceFacet.claimRefund(ticketId, FeeType.ETH, tokenId, bob); |
| 77 | + assertEq(ticket.ownerOf(tokenId), owner); |
| 78 | + assertEq(fullTicketData.soldTickets, 1); |
| 79 | + assertEq(bob.balance, ethFee); |
| 80 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.ETH), 0); |
| 81 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.ETH), hostItFee); |
| 82 | + } |
| 83 | + |
| 84 | + function test_claimRefundUSDT() public { |
| 85 | + (uint64 ticketId, uint40 tokenId, uint256 usdtFee, uint256 hostItFee, ERC20Mock usdt) = _mintTicketUSDT(); |
| 86 | + FullTicketData memory fullTicketData = factoryFacet.ticketData(ticketId); |
| 87 | + ITicket ticket = ITicket(fullTicketData.ticketAddress); |
| 88 | + assertEq(ticket.ownerOf(tokenId), alice); |
| 89 | + assertEq(fullTicketData.soldTickets, 1); |
| 90 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.USDT), usdtFee); |
| 91 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.USDT), hostItFee); |
| 92 | + vm.prank(alice); |
| 93 | + ticket.approve(hostIt, tokenId); |
| 94 | + vm.prank(alice); |
| 95 | + vm.warp(fullTicketData.endTime); |
| 96 | + vm.expectEmit(true, true, true, true, hostIt); |
| 97 | + emit TicketRefunded(ticketId, FeeType.USDT, usdtFee, bob); |
| 98 | + marketplaceFacet.claimRefund(ticketId, FeeType.USDT, tokenId, bob); |
| 99 | + assertEq(ticket.ownerOf(tokenId), owner); |
| 100 | + assertEq(fullTicketData.soldTickets, 1); |
| 101 | + assertEq(usdt.balanceOf(bob), usdtFee); |
| 102 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.USDT), 0); |
| 103 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.USDT), hostItFee); |
| 104 | + } |
| 105 | + |
| 106 | + function test_claimRefundUSDC() public { |
| 107 | + (uint64 ticketId, uint40 tokenId, uint256 usdcFee, uint256 hostItFee, ERC20Mock usdc) = _mintTicketUSDC(); |
| 108 | + FullTicketData memory fullTicketData = factoryFacet.ticketData(ticketId); |
| 109 | + ITicket ticket = ITicket(fullTicketData.ticketAddress); |
| 110 | + assertEq(ticket.ownerOf(tokenId), alice); |
| 111 | + assertEq(fullTicketData.soldTickets, 1); |
| 112 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.USDC), usdcFee); |
| 113 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.USDC), hostItFee); |
| 114 | + vm.prank(alice); |
| 115 | + ticket.approve(hostIt, tokenId); |
| 116 | + vm.prank(alice); |
| 117 | + vm.warp(fullTicketData.endTime); |
| 118 | + vm.expectEmit(true, true, true, true, hostIt); |
| 119 | + emit TicketRefunded(ticketId, FeeType.USDC, usdcFee, bob); |
| 120 | + marketplaceFacet.claimRefund(ticketId, FeeType.USDC, tokenId, bob); |
| 121 | + assertEq(ticket.ownerOf(tokenId), owner); |
| 122 | + assertEq(fullTicketData.soldTickets, 1); |
| 123 | + assertEq(usdc.balanceOf(bob), usdcFee); |
| 124 | + assertEq(marketplaceFacet.getTicketBalance(ticketId, FeeType.USDC), 0); |
| 125 | + assertEq(marketplaceFacet.getHostItBalance(FeeType.USDC), hostItFee); |
| 126 | + } |
| 127 | + |
61 | 128 | function test_withdrawTicketBalanceETH() public { |
62 | 129 | (uint64 ticketId,, uint256 ethFee,) = _mintTicketETH(); |
63 | 130 | // Check platform balances before withdraw |
|
0 commit comments