@@ -273,6 +273,64 @@ def test_mint_batch(self):
273273 supply = self .diamond_terminus .terminus_pool_supply (pool_id )
274274 self .assertEqual (supply , 1 )
275275
276+ def test_mint_batch_with_approval (self ):
277+ pool_id = self .diamond_terminus .total_pools ()
278+
279+ self .assertFalse (
280+ self .diamond_terminus .is_approved_for_pool (pool_id , accounts [3 ])
281+ )
282+ self .assertFalse (
283+ self .diamond_terminus .is_approved_for_pool (pool_id - 1 , accounts [3 ])
284+ )
285+ balances_before = [
286+ self .diamond_terminus .balance_of (accounts [2 ].address , pool_id ),
287+ self .diamond_terminus .balance_of (accounts [2 ].address , pool_id - 1 ),
288+ ]
289+ supply_before = [
290+ self .diamond_terminus .terminus_pool_supply (pool_id ),
291+ self .diamond_terminus .terminus_pool_supply (pool_id - 1 ),
292+ ]
293+ self .diamond_terminus .approve_for_pool (
294+ pool_id , accounts [3 ], {"from" : accounts [1 ]}
295+ )
296+ with self .assertRaises (Exception ):
297+ self .diamond_terminus .mint_batch (
298+ accounts [2 ].address ,
299+ pool_i_ds = [pool_id , pool_id - 1 ],
300+ amounts = [1 , 1 ],
301+ data = b"" ,
302+ transaction_config = {"from" : accounts [3 ]},
303+ )
304+
305+ self .diamond_terminus .approve_for_pool (
306+ pool_id - 1 , accounts [3 ], {"from" : accounts [1 ]}
307+ )
308+
309+ self .diamond_terminus .mint_batch (
310+ accounts [2 ].address ,
311+ pool_i_ds = [pool_id , pool_id - 1 ],
312+ amounts = [1 , 1 ],
313+ data = b"" ,
314+ transaction_config = {"from" : accounts [3 ]},
315+ )
316+
317+ self .assertEqual (
318+ self .diamond_terminus .balance_of (accounts [2 ].address , pool_id ),
319+ balances_before [0 ] + 1 ,
320+ )
321+ self .assertEqual (
322+ self .diamond_terminus .balance_of (accounts [2 ].address , pool_id - 1 ),
323+ balances_before [1 ] + 1 ,
324+ )
325+
326+ self .assertEqual (
327+ self .diamond_terminus .terminus_pool_supply (pool_id ), supply_before [0 ] + 1
328+ )
329+ self .assertEqual (
330+ self .diamond_terminus .terminus_pool_supply (pool_id - 1 ),
331+ supply_before [1 ] + 1 ,
332+ )
333+
276334 def test_mint_batch_fails_if_it_exceeds_capacity (self ):
277335 pool_id = self .diamond_terminus .total_pools ()
278336 with self .assertRaises (Exception ):
@@ -350,6 +408,64 @@ def test_pool_mint_batch_as_unauthorized_third_party(self):
350408 final_balance = self .diamond_terminus .balance_of (account .address , pool_id )
351409 self .assertEqual (final_balance , initial_balances [i ])
352410
411+ def test_pool_mint_with_pool_approval (self ):
412+ self .diamond_terminus .create_pool_v1 (10 , False , False , {"from" : accounts [1 ]})
413+ pool_id = self .diamond_terminus .total_pools ()
414+
415+ self .assertFalse (
416+ self .diamond_terminus .is_approved_for_pool (pool_id , accounts [2 ].address )
417+ )
418+ with self .assertRaises (Exception ):
419+ self .diamond_terminus .mint (
420+ accounts [2 ].address , pool_id , 1 , b"" , {"from" : accounts [2 ]}
421+ )
422+
423+ self .diamond_terminus .approve_for_pool (
424+ pool_id , accounts [2 ].address , {"from" : accounts [1 ]}
425+ )
426+ supply_0 = self .diamond_terminus .terminus_pool_supply (pool_id )
427+ balance_0 = self .diamond_terminus .balance_of (accounts [2 ].address , pool_id )
428+ self .diamond_terminus .mint (
429+ accounts [2 ].address , pool_id , 1 , b"" , {"from" : accounts [1 ]}
430+ )
431+ balance_1 = self .diamond_terminus .balance_of (accounts [2 ].address , pool_id )
432+ supply_1 = self .diamond_terminus .terminus_pool_supply (pool_id )
433+
434+ self .assertEqual (balance_1 , balance_0 + 1 )
435+ self .assertEqual (supply_0 + 1 , supply_1 )
436+
437+ def test_pool_mint_batch_with_approval (self ):
438+ pool_id = self .diamond_terminus .total_pools ()
439+ target_accounts = [account .address for account in accounts [:5 ]]
440+ target_amounts = [1 for _ in accounts [:5 ]]
441+ num_accounts = len (accounts [:5 ])
442+ initial_pool_supply = self .diamond_terminus .terminus_pool_supply (pool_id )
443+ initial_balances : List [int ] = []
444+ for account in accounts [:5 ]:
445+ initial_balances .append (
446+ self .diamond_terminus .balance_of (account .address , pool_id )
447+ )
448+
449+ self .assertFalse (
450+ self .diamond_terminus .is_approved_for_pool (pool_id , accounts [2 ].address )
451+ )
452+ with self .assertRaises (Exception ):
453+ self .diamond_terminus .pool_mint_batch (
454+ pool_id , target_accounts , target_amounts , {"from" : accounts [2 ]}
455+ )
456+ self .diamond_terminus .approve_for_pool (
457+ pool_id , accounts [2 ].address , {"from" : accounts [1 ]}
458+ )
459+ self .diamond_terminus .pool_mint_batch (
460+ pool_id , target_accounts , target_amounts , {"from" : accounts [2 ]}
461+ )
462+
463+ final_pool_supply = self .diamond_terminus .terminus_pool_supply (pool_id )
464+ self .assertEqual (final_pool_supply , initial_pool_supply + num_accounts )
465+ for i , account in enumerate (accounts [:5 ]):
466+ final_balance = self .diamond_terminus .balance_of (account .address , pool_id )
467+ self .assertEqual (final_balance , initial_balances [i ] + 1 )
468+
353469 def test_transfer (self ):
354470 pool_id = self .diamond_terminus .total_pools ()
355471 self .diamond_terminus .mint (accounts [2 ], pool_id , 1 , b"" , {"from" : accounts [1 ]})
0 commit comments