2
2
pragma solidity 0.8.17 ;
3
3
4
4
import { IConditionalSwap } from "contracts/interfaces/IConditionalSwap.sol " ;
5
+ import { getConOrderHash } from "contracts/libraries/ConditionalOrder.sol " ;
5
6
import { ConditionalOrderSwapTest } from "test/forkMainnet/ConditionalSwap/Setup.t.sol " ;
6
7
import { BalanceSnapshot, Snapshot } from "test/utils/BalanceSnapshot.sol " ;
7
8
@@ -21,11 +22,23 @@ contract ConFillTest is ConditionalOrderSwapTest {
21
22
Snapshot memory recMakerToken = BalanceSnapshot.take ({ owner: recipient, token: defaultOrder.makerToken });
22
23
23
24
// craft the `flagAndPeriod` of the defaultOrder for BestBuy case
24
- uint256 flags = 1 << 253 ;
25
+ uint256 flags = FLG_PARTIAL_FILL_MASK ;
25
26
defaultOrder.flagsAndPeriod = flags;
26
27
27
28
defaultTakerSig = signConOrder (takerPrivateKey, defaultOrder, address (conditionalSwap));
28
29
30
+ vm.expectEmit (true , true , true , true );
31
+ emit ConditionalOrderFilled (
32
+ getConOrderHash (defaultOrder),
33
+ defaultOrder.taker,
34
+ defaultOrder.maker,
35
+ defaultOrder.takerToken,
36
+ defaultOrder.takerTokenAmount,
37
+ defaultOrder.makerToken,
38
+ defaultOrder.makerTokenAmount,
39
+ recipient
40
+ );
41
+
29
42
vm.startPrank (maker);
30
43
conditionalSwap.fillConOrder (defaultOrder, defaultTakerSig, defaultOrder.takerTokenAmount, defaultOrder.makerTokenAmount, defaultSettlementData);
31
44
vm.stopPrank ();
@@ -38,7 +51,7 @@ contract ConFillTest is ConditionalOrderSwapTest {
38
51
recMakerToken.assertChange (int256 (defaultOrder.makerTokenAmount));
39
52
}
40
53
41
- function testRepayment () external {
54
+ function testRepaymentOrDCAOrder () external {
42
55
Snapshot memory takerTakerToken = BalanceSnapshot.take ({ owner: taker, token: defaultOrder.takerToken });
43
56
Snapshot memory takerMakerToken = BalanceSnapshot.take ({ owner: taker, token: defaultOrder.makerToken });
44
57
Snapshot memory makerTakerToken = BalanceSnapshot.take ({ owner: maker, token: defaultOrder.takerToken });
@@ -47,12 +60,26 @@ contract ConFillTest is ConditionalOrderSwapTest {
47
60
Snapshot memory recMakerToken = BalanceSnapshot.take ({ owner: recipient, token: defaultOrder.makerToken });
48
61
49
62
// craft the `flagAndPeriod` of the defaultOrder for BestBuy case
50
- uint256 flags = 7 << 253 ;
63
+ uint256 flags = FLG_SINGLE_AMOUNT_CAP_MASK | FLG_PERIODIC_MASK | FLG_PARTIAL_FILL_MASK ;
51
64
uint256 period = 12 hours ;
52
- uint256 numberOfCycles = (defaultExpiry - block .timestamp ) / period;
53
65
defaultOrder.flagsAndPeriod = flags | period;
54
66
67
+ uint256 numberOfCycles = (defaultExpiry - block .timestamp ) / period;
68
+
55
69
defaultTakerSig = signConOrder (takerPrivateKey, defaultOrder, address (conditionalSwap));
70
+
71
+ vm.expectEmit (true , true , true , true );
72
+ emit ConditionalOrderFilled (
73
+ getConOrderHash (defaultOrder),
74
+ defaultOrder.taker,
75
+ defaultOrder.maker,
76
+ defaultOrder.takerToken,
77
+ defaultOrder.takerTokenAmount,
78
+ defaultOrder.makerToken,
79
+ defaultOrder.makerTokenAmount,
80
+ recipient
81
+ );
82
+
56
83
vm.startPrank (maker);
57
84
for (uint256 i; i < numberOfCycles; ++ i) {
58
85
conditionalSwap.fillConOrder (defaultOrder, defaultTakerSig, defaultOrder.takerTokenAmount, defaultOrder.makerTokenAmount, defaultSettlementData);
@@ -68,14 +95,6 @@ contract ConFillTest is ConditionalOrderSwapTest {
68
95
recMakerToken.assertChange (int256 (defaultOrder.makerTokenAmount) * int256 (numberOfCycles));
69
96
}
70
97
71
- function testDCAOrder () public {
72
- // craft the `flagAndPeriod` of the defaultOrder for BestBuy case
73
- uint256 flags = 7 << 253 ;
74
- uint256 period = 1 days ;
75
-
76
- defaultOrder.flagsAndPeriod = flags | period;
77
- }
78
-
79
98
function testCannotFillExpiredOrder () public {
80
99
vm.warp (defaultOrder.expiry + 1 );
81
100
@@ -103,7 +122,7 @@ contract ConFillTest is ConditionalOrderSwapTest {
103
122
104
123
function testCannotFillOrderWithInvalidTotalTakerTokenAmount () public {
105
124
// craft the `flagAndPeriod` of the defaultOrder for BestBuy case
106
- uint256 flags = 1 << 253 ;
125
+ uint256 flags = FLG_PARTIAL_FILL_MASK ;
107
126
defaultOrder.flagsAndPeriod = flags;
108
127
109
128
defaultTakerSig = signConOrder (takerPrivateKey, defaultOrder, address (conditionalSwap));
@@ -120,7 +139,7 @@ contract ConFillTest is ConditionalOrderSwapTest {
120
139
121
140
function testCannotFillOrderWithInvalidSingleTakerTokenAmount () public {
122
141
// craft the `flagAndPeriod` of the defaultOrder for BestBuy case
123
- uint256 flags = 7 << 253 ;
142
+ uint256 flags = FLG_SINGLE_AMOUNT_CAP_MASK | FLG_PERIODIC_MASK | FLG_PARTIAL_FILL_MASK ;
124
143
uint256 period = 12 hours ;
125
144
defaultOrder.flagsAndPeriod = flags | period;
126
145
@@ -153,7 +172,7 @@ contract ConFillTest is ConditionalOrderSwapTest {
153
172
154
173
function testCannotFillOrderWithinSamePeriod () public {
155
174
// craft the `flagAndPeriod` of the defaultOrder for BestBuy case
156
- uint256 flags = 7 << 253 ;
175
+ uint256 flags = FLG_SINGLE_AMOUNT_CAP_MASK | FLG_PERIODIC_MASK | FLG_PARTIAL_FILL_MASK ;
157
176
uint256 period = 12 hours ;
158
177
defaultOrder.flagsAndPeriod = flags | period;
159
178
@@ -165,4 +184,24 @@ contract ConFillTest is ConditionalOrderSwapTest {
165
184
conditionalSwap.fillConOrder (defaultOrder, defaultTakerSig, defaultOrder.takerTokenAmount, defaultOrder.makerTokenAmount, defaultSettlementData);
166
185
vm.stopPrank ();
167
186
}
187
+
188
+ function testCannotFillOrderWithInvalidSettlementType () public {
189
+ bytes memory settlementData = hex "02 " ;
190
+
191
+ defaultTakerSig = signConOrder (takerPrivateKey, defaultOrder, address (conditionalSwap));
192
+
193
+ vm.expectRevert (IConditionalSwap.InvalidSettlementType.selector );
194
+ vm.startPrank (maker);
195
+ conditionalSwap.fillConOrder (defaultOrder, defaultTakerSig, defaultOrder.takerTokenAmount, defaultOrder.makerTokenAmount, settlementData);
196
+ vm.stopPrank ();
197
+ }
198
+
199
+ function testCannotFillOrderWithInvalidMakingAmount () public {
200
+ defaultTakerSig = signConOrder (takerPrivateKey, defaultOrder, address (conditionalSwap));
201
+
202
+ vm.expectRevert (IConditionalSwap.InvalidMakingAmount.selector );
203
+ vm.startPrank (maker);
204
+ conditionalSwap.fillConOrder (defaultOrder, defaultTakerSig, defaultOrder.takerTokenAmount, defaultOrder.makerTokenAmount - 1 , defaultSettlementData);
205
+ vm.stopPrank ();
206
+ }
168
207
}
0 commit comments