Beispiel #1
0
 def test_payout_amount_under_minimum(self, gba):
     usd_user = self.make_participant('usd_user', main_currency='USD')
     route = ExchangeRoute.insert(usd_user, 'mango-ba', 'fake ID')
     self.make_exchange('mango-cc', USD(8), 0, usd_user)
     gba.return_value = self.bank_account_outside_sepa
     with self.assertRaises(FeeExceedsAmount):
         payout(self.db, route, USD('0.10'))
Beispiel #2
0
 def test_payout_amount_under_minimum(self, gba):
     usd_user = self.make_participant('usd_user', main_currency='USD')
     route = ExchangeRoute.insert(usd_user, 'mango-ba', 'fake ID', 'chargeable')
     self.make_exchange('mango-cc', USD(8), 0, usd_user)
     gba.return_value = self.bank_account_outside_sepa
     with self.assertRaises(FeeExceedsAmount):
         payout(self.db, route, USD('0.10'))
Beispiel #3
0
 def test_payout_suspended_user(self):
     self.make_exchange('mango-cc', 20, 0, self.homer)
     self.db.run("""
         UPDATE participants
            SET is_suspended = true
          WHERE id = %s
     """, (self.homer.id,))
     self.homer.set_attributes(is_suspended=True)
     with self.assertRaises(AccountSuspended):
         payout(self.db, self.homer_route, EUR('10.00'))
Beispiel #4
0
 def test_payout_suspended_user(self):
     self.make_exchange('mango-cc', 20, 0, self.homer)
     self.db.run("""
         UPDATE participants
            SET is_suspended = true
          WHERE id = %s
     """, (self.homer.id,))
     self.homer.set_attributes(is_suspended=True)
     with self.assertRaises(AccountSuspended):
         payout(self.db, self.homer_route, D('10.00'))
 def test_5_sync_with_mangopay_reverts_payouts_that_didnt_happen(self):
     self.make_exchange('mango-cc', 41, 0, self.homer)
     with mock.patch('liberapay.billing.transactions.record_exchange_result') as rer, \
          mock.patch('liberapay.billing.transactions.test_hook') as test_hook:
         rer.side_effect = test_hook.side_effect = Foobar
         with self.assertRaises(Foobar):
             payout(self.db, self.homer_route, EUR('35.00'))
     exchange = self.db.one("SELECT * FROM exchanges WHERE amount < 0")
     assert exchange.status == 'pre'
     self.throw_transactions_back_in_time()
     sync_with_mangopay(self.db)
     exchange = self.db.one("SELECT * FROM exchanges WHERE amount < 0")
     assert exchange.status == 'failed'
     homer = self.homer.refetch()
     assert homer.balance == homer.get_withdrawable_amount('EUR') == 41
Beispiel #6
0
 def test_5_sync_with_mangopay_reverts_payouts_that_didnt_happen(self):
     self.make_exchange('mango-cc', 41, 0, self.homer)
     with mock.patch('liberapay.billing.transactions.record_exchange_result') as rer, \
          mock.patch('liberapay.billing.transactions.test_hook') as test_hook:
         rer.side_effect = test_hook.side_effect = Foobar
         with self.assertRaises(Foobar):
             payout(self.db, self.homer_route, D('35.00'))
     exchange = self.db.one("SELECT * FROM exchanges WHERE amount < 0")
     assert exchange.status == 'pre'
     self.throw_transactions_back_in_time()
     sync_with_mangopay(self.db)
     exchange = self.db.one("SELECT * FROM exchanges WHERE amount < 0")
     assert exchange.status == 'failed'
     homer = self.homer.refetch()
     assert homer.balance == homer.get_withdrawable_amount('EUR') == 41
 def test_payout_failure(self, test_hook):
     test_hook.side_effect = Foobar
     self.make_exchange('mango-cc', 20, 0, self.homer)
     exchange = payout(self.db, self.homer_route, EUR('1.00'))
     assert exchange.status == 'failed'
     homer = Participant.from_id(self.homer.id)
     assert exchange.note == "Foobar()"
     assert self.homer.balance == homer.balance == 20
Beispiel #8
0
 def test_payout_failure(self, test_hook):
     test_hook.side_effect = Foobar
     self.make_exchange('mango-cc', 20, 0, self.homer)
     exchange = payout(self.db, self.homer_route, D('1.00'))
     assert exchange.status == 'failed'
     homer = Participant.from_id(self.homer.id)
     assert exchange.note == "Foobar()"
     assert self.homer.balance == homer.balance == 20
Beispiel #9
0
 def test_payout(self):
     e = charge(self.db, self.janet_route, EUR('46.00'), 'http://localhost/')
     assert e.status == 'succeeded', e.note
     self.janet.set_tip_to(self.homer, EUR('42.00'))
     self.janet.close('downstream')
     self.homer = self.homer.refetch()
     assert self.homer.balance == 46
     exchange = payout(self.db, self.homer_route, EUR('30.00'))
     assert exchange.note is None
     assert exchange.status == 'created'
     self.homer = self.homer.refetch()
     assert self.homer.balance == 16
     self.db.self_check()
Beispiel #10
0
 def test_payout(self):
     e = charge(self.db, self.janet_route, D('46.00'), 'http://localhost/')
     assert e.status == 'succeeded', e.note
     self.janet.set_tip_to(self.homer, EUR('42.00'))
     self.janet.close('downstream')
     self.homer = self.homer.refetch()
     assert self.homer.balance == 46
     exchange = payout(self.db, self.homer_route, D('30.00'))
     assert exchange.note is None
     assert exchange.status == 'created'
     self.homer = self.homer.refetch()
     assert self.homer.balance == 16
     self.db.self_check()
 def test_payout_quarantine(self, gba):
     self.make_exchange('mango-cc', 39, 0, self.homer)
     gba.return_value = self.bank_account
     with mock.patch.multiple(transactions, QUARANTINE='1 month'):
         with self.assertRaises(NotEnoughWithdrawableMoney):
             payout(self.db, self.homer_route, EUR('32.00'))
 def test_payout_invalidated_bank_account(self):
     self.make_exchange('mango-cc', 20, 0, self.homer)
     self.homer_route.invalidate()
     with self.assertRaises(AssertionError):
         payout(self.db, self.homer_route, EUR('10.00'))
 def test_payout_no_route(self):
     self.make_exchange('mango-cc', 20, 0, self.david)
     with self.assertRaises(AssertionError):
         payout(self.db, None, EUR('1.00'))
 def test_payout_during_payday(self):
     self.make_exchange('mango-cc', 200, 0, self.homer)
     Payday.start()
     with self.assertRaises(PaydayIsRunning):
         payout(self.db, self.homer_route, EUR('97.35'))
Beispiel #15
0
 def test_payout_amount_under_minimum(self, gba):
     self.make_exchange('mango-cc', 8, 0, self.homer)
     gba.return_value = self.bank_account_outside_sepa
     with self.assertRaises(FeeExceedsAmount):
         payout(self.db, self.homer_route, EUR('0.10'))
Beispiel #16
0
 def test_payout_during_payday(self):
     self.make_exchange('mango-cc', 200, 0, self.homer)
     Payday.start()
     with self.assertRaises(PaydayIsRunning):
         payout(self.db, self.homer_route, D('97.35'))
Beispiel #17
0
 def test_payout_quarantine(self, gba):
     self.make_exchange('mango-cc', 39, 0, self.homer)
     gba.return_value = self.bank_account
     with mock.patch.multiple(transactions, QUARANTINE='1 month'):
         with self.assertRaises(NotEnoughWithdrawableMoney):
             payout(self.db, self.homer_route, D('32.00'))
Beispiel #18
0
 def test_payout_invalidated_bank_account(self):
     self.make_exchange('mango-cc', 20, 0, self.homer)
     self.homer_route.invalidate()
     with self.assertRaises(AssertionError):
         payout(self.db, self.homer_route, D('10.00'))
Beispiel #19
0
 def test_payout_no_route(self):
     self.make_exchange('mango-cc', 20, 0, self.david)
     with self.assertRaises(AssertionError):
         payout(self.db, None, D('1.00'))
Beispiel #20
0
 def test_payout_amount_under_minimum(self, gba):
     self.make_exchange('mango-cc', 8, 0, self.homer)
     gba.return_value = self.bank_account_outside_sepa
     with self.assertRaises(FeeExceedsAmount):
         payout(self.db, self.homer_route, D('0.10'))