Skip to content

Commit 51ce46b

Browse files
committed
Add refund claim tests and enable refunds
Added tests for claiming ticket refunds in ETH, USDT, and USDC to MarketplaceTest. Updated DeployedHostItTickets to set isRefundable to true for paid tickets, enabling refund functionality in tests.
1 parent 7c6b417 commit 51ce46b

File tree

2 files changed

+69
-2
lines changed

2 files changed

+69
-2
lines changed

test/Marketplace.t.sol

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
pragma solidity 0.8.30;
33

44
import {ERC20Mock} from "@openzeppelin/contracts/mocks/token/ERC20Mock.sol";
5+
import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
56
import {FullTicketData} from "@ticket-storage/FactoryStorage.sol";
67
import {FeeType} from "@ticket-storage/MarketplaceStorage.sol";
78
import {DeployedHostItTickets} from "@ticket-test/states/DeployedHostItTickets.sol";
89
import {ITicket} from "@ticket/interfaces/ITicket.sol";
910
/// forge-lint: disable-next-line(unaliased-plain-import)
1011
import "@ticket-logs/MarketplaceLogs.sol";
1112

12-
contract MarketplaceTest is DeployedHostItTickets {
13+
contract MarketplaceTest is DeployedHostItTickets, ERC721Holder {
1314
function test_mintFreeTicket() public {
1415
vm.prank(alice);
1516
(uint64 ticketId, uint40 tokenId) = _mintTicketFree();
@@ -58,6 +59,72 @@ contract MarketplaceTest is DeployedHostItTickets {
5859
assertEq(marketplaceFacet.getTicketFee(ticketId, FeeType.USDC), _getFees()[2]);
5960
}
6061

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+
61128
function test_withdrawTicketBalanceETH() public {
62129
(uint64 ticketId,, uint256 ethFee,) = _mintTicketETH();
63130
// Check platform balances before withdraw

test/states/DeployedHostItTickets.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ abstract contract DeployedHostItTickets is Test {
182182
maxTickets: type(uint40).max,
183183
maxTicketsPerUser: 0,
184184
isFree: false,
185-
isRefundable: false,
185+
isRefundable: true,
186186
name: "Paid Ticket",
187187
symbol: "",
188188
uri: "ipfs://$"

0 commit comments

Comments
 (0)