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'))
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'))
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'))
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
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
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
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()
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'))
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'))
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'))
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'))
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'))
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'))
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'))