@@ -61,6 +61,10 @@ describe('Timed Deal Provider', function () {
61
61
expect ( await timedDealProvider . name ( ) ) . to . equal ( 'TimedDealProvider' ) ;
62
62
} ) ;
63
63
64
+ it ( 'check if the contract supports IBeforeTransfer interface' , async ( ) => {
65
+ expect ( await timedDealProvider . supportsInterface ( '0x1ffb811f' ) ) . to . equal ( true ) ;
66
+ } ) ;
67
+
64
68
it ( 'should get timed provider data after creation' , async ( ) => {
65
69
const poolData = await lockDealNFT . getData ( poolId ) ;
66
70
const params = [ amount , startTime , finishTime , amount ] ;
@@ -140,9 +144,9 @@ describe('Timed Deal Provider', function () {
140
144
await lockDealNFT
141
145
. connect ( receiver )
142
146
[ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId , packedData ) ;
143
- const params = [ amount / 2 , startTime , finishTime , amount / 2 ] ;
147
+ const params = [ 0 , startTime , finishTime , amount ] ;
144
148
const poolData = await lockDealNFT . getData ( poolId ) ;
145
- expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , receiver . address , token , params ] ) ;
149
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , lockDealNFT . address , token , params ] ) ;
146
150
} ) ;
147
151
148
152
it ( 'should check data in new pool after split' , async ( ) => {
@@ -155,6 +159,16 @@ describe('Timed Deal Provider', function () {
155
159
expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId + 1 , vaultId , newOwner . address , token , params ] ) ;
156
160
} ) ;
157
161
162
+ it ( 'should check data in newly copied pool after split' , async ( ) => {
163
+ const packedData = ethers . utils . defaultAbiCoder . encode ( [ 'uint256' , 'address' ] , [ ratio , newOwner . address ] ) ;
164
+ await lockDealNFT
165
+ . connect ( receiver )
166
+ [ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId , packedData ) ;
167
+ const params = [ amount / 2 , startTime , finishTime , amount / 2 ] ;
168
+ const poolData = await lockDealNFT . getData ( poolId + 2 ) ;
169
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId + 2 , vaultId , newOwner . address , token , params ] ) ;
170
+ } ) ;
171
+
158
172
it ( 'should check event data after split' , async ( ) => {
159
173
const packedData = ethers . utils . defaultAbiCoder . encode ( [ 'uint256' , 'address' ] , [ ratio , newOwner . address ] ) ;
160
174
const tx = await lockDealNFT
@@ -166,7 +180,7 @@ describe('Timed Deal Provider', function () {
166
180
expect ( events [ events . length - 1 ] . args . newPoolId ) . to . equal ( poolId + 1 ) ;
167
181
expect ( events [ events . length - 1 ] . args . owner ) . to . equal ( receiver . address ) ;
168
182
expect ( events [ events . length - 1 ] . args . newOwner ) . to . equal ( newOwner . address ) ;
169
- expect ( events [ events . length - 1 ] . args . splitLeftAmount ) . to . equal ( amount / 2 ) ;
183
+ expect ( events [ events . length - 1 ] . args . splitLeftAmount ) . to . equal ( 0 ) ;
170
184
expect ( events [ events . length - 1 ] . args . newSplitLeftAmount ) . to . equal ( amount / 2 ) ;
171
185
} ) ;
172
186
@@ -179,9 +193,9 @@ describe('Timed Deal Provider', function () {
179
193
const packedData = ethers . utils . defaultAbiCoder . encode ( [ 'uint256' , 'address' ] , [ ratio , newOwner . address ] ) ;
180
194
await lockDealNFT
181
195
. connect ( receiver )
182
- [ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId , packedData ) ;
183
- const poolData = await lockDealNFT . getData ( poolId ) ;
184
- const newPoolData = await lockDealNFT . getData ( poolId + 1 ) ;
196
+ [ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId + 1 , packedData ) ;
197
+ const poolData = await lockDealNFT . getData ( poolId + 2 ) ;
198
+ const newPoolData = await lockDealNFT . getData ( poolId + 3 ) ;
185
199
expect ( poolData . params [ 3 ] . add ( newPoolData . params [ 3 ] ) ) . to . equal ( amount ) ;
186
200
expect ( poolData . params [ 0 ] . add ( newPoolData . params [ 0 ] ) ) . to . equal ( amount - amount / 10 ) ;
187
201
} ) ;
@@ -196,9 +210,9 @@ describe('Timed Deal Provider', function () {
196
210
const packedData = ethers . utils . defaultAbiCoder . encode ( [ 'uint256' , 'address' ] , [ ratio , newOwner . address ] ) ;
197
211
await lockDealNFT
198
212
. connect ( receiver )
199
- [ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId , packedData ) ;
200
- const poolData = await lockDealNFT . getData ( poolId ) ;
201
- const newPoolData = await lockDealNFT . getData ( poolId + 1 ) ;
213
+ [ 'safeTransferFrom(address,address,uint256,bytes)' ] ( receiver . address , lockDealNFT . address , poolId + 1 , packedData ) ;
214
+ const poolData = await lockDealNFT . getData ( poolId + 2 ) ;
215
+ const newPoolData = await lockDealNFT . getData ( poolId + 3 ) ;
202
216
203
217
expect ( poolData . params [ 3 ] . add ( newPoolData . params [ 3 ] ) ) . to . equal ( amount ) ;
204
218
expect ( poolData . params [ 0 ] . add ( newPoolData . params [ 0 ] ) ) . to . equal ( amount - amount / 4 ) ;
@@ -210,29 +224,29 @@ describe('Timed Deal Provider', function () {
210
224
expect ( await timedDealProvider . getWithdrawableAmount ( poolId ) ) . to . equal ( 0 ) ;
211
225
} ) ;
212
226
213
- it ( 'should withdraw 25% tokens' , async ( ) => {
227
+ it ( 'should check old pool after withdraw 25% tokens' , async ( ) => {
214
228
await time . setNextBlockTimestamp ( startTime + halfTime / 2 ) ;
215
229
216
230
await lockDealNFT
217
231
. connect ( receiver )
218
232
[ 'safeTransferFrom(address,address,uint256)' ] ( receiver . address , lockDealNFT . address , poolId ) ;
219
- const params = [ amount - amount / 4 , startTime , finishTime , amount ] ;
233
+ const params = [ 0 , startTime , finishTime , amount ] ;
220
234
const poolData = await lockDealNFT . getData ( poolId ) ;
221
- expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , receiver . address , token , params ] ) ;
235
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , lockDealNFT . address , token , params ] ) ;
222
236
} ) ;
223
237
224
- it ( 'should withdraw half tokens' , async ( ) => {
238
+ it ( 'should check old pool after withdraw half tokens' , async ( ) => {
225
239
await time . setNextBlockTimestamp ( startTime + halfTime ) ;
226
240
227
241
await lockDealNFT
228
242
. connect ( receiver )
229
243
[ 'safeTransferFrom(address,address,uint256)' ] ( receiver . address , lockDealNFT . address , poolId ) ;
230
- const params = [ amount / 2 , startTime , finishTime , amount ] ;
244
+ const params = [ 0 , startTime , finishTime , amount ] ;
231
245
const poolData = await lockDealNFT . getData ( poolId ) ;
232
- expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , receiver . address , token , params ] ) ;
246
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , lockDealNFT . address , token , params ] ) ;
233
247
} ) ;
234
248
235
- it ( 'should withdraw all tokens' , async ( ) => {
249
+ it ( 'should check old pool after withdraw all tokens' , async ( ) => {
236
250
await time . setNextBlockTimestamp ( finishTime + 1 ) ;
237
251
238
252
await lockDealNFT
@@ -242,6 +256,38 @@ describe('Timed Deal Provider', function () {
242
256
const poolData = await lockDealNFT . getData ( poolId ) ;
243
257
expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , lockDealNFT . address , token , params ] ) ;
244
258
} ) ;
259
+
260
+ it ( 'should check new pool after withdraw 25% tokens' , async ( ) => {
261
+ await time . setNextBlockTimestamp ( startTime + halfTime / 2 ) ;
262
+
263
+ await lockDealNFT
264
+ . connect ( receiver )
265
+ [ 'safeTransferFrom(address,address,uint256)' ] ( receiver . address , lockDealNFT . address , poolId ) ;
266
+ const params = [ amount - amount / 4 , startTime , finishTime , amount ] ;
267
+ const poolData = await lockDealNFT . getData ( poolId + 1 ) ;
268
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId + 1 , vaultId , receiver . address , token , params ] ) ;
269
+ } ) ;
270
+
271
+ it ( 'should check new pool after withdraw half tokens' , async ( ) => {
272
+ await time . setNextBlockTimestamp ( startTime + halfTime ) ;
273
+
274
+ await lockDealNFT
275
+ . connect ( receiver )
276
+ [ 'safeTransferFrom(address,address,uint256)' ] ( receiver . address , lockDealNFT . address , poolId ) ;
277
+ const params = [ amount / 2 , startTime , finishTime , amount ] ;
278
+ const poolData = await lockDealNFT . getData ( poolId + 1 ) ;
279
+ expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId + 1 , vaultId , receiver . address , token , params ] ) ;
280
+ } ) ;
281
+
282
+ it ( 'should not create new pool after withdraw all tokens' , async ( ) => {
283
+ await time . setNextBlockTimestamp ( finishTime + 1 ) ;
284
+
285
+ await lockDealNFT
286
+ . connect ( receiver )
287
+ [ 'safeTransferFrom(address,address,uint256)' ] ( receiver . address , lockDealNFT . address , poolId ) ;
288
+ const poolData = await lockDealNFT . getData ( poolId + 1 ) ;
289
+ expect ( poolData ) . to . deep . equal ( [ constants . AddressZero , "" , 0 , 0 , constants . AddressZero , constants . AddressZero , [ ] ] ) ;
290
+ } ) ;
245
291
} ) ;
246
292
247
293
describe ( 'test higher cascading providers' , ( ) => {
@@ -261,7 +307,7 @@ describe('Timed Deal Provider', function () {
261
307
it ( 'should withdraw half tokens with higher mock provider' , async ( ) => {
262
308
await mockProvider . withdraw ( poolId , amount / 2 ) ;
263
309
const poolData = await lockDealNFT . getData ( poolId ) ;
264
- const params = [ amount / 2 , startTime , finishTime , amount ] ;
310
+ const params = [ 0 , startTime , finishTime , amount ] ;
265
311
expect ( poolData ) . to . deep . equal ( [ timedDealProvider . address , name , poolId , vaultId , receiver . address , token , params ] ) ;
266
312
} ) ;
267
313
0 commit comments