def test_charge_100(self): with self.assertRaises(Response) as cm: charge(self.db, self.janet, D('100'), 'http://localhost/') r = cm.exception assert r.code == 302 janet = Participant.from_id(self.janet.id) assert self.janet.balance == janet.balance == 0
def test_charge_suspended_user(self): self.db.run( """ UPDATE participants SET is_suspended = true WHERE id = %s """, (self.janet.id, )) self.janet.set_attributes(is_suspended=True) with self.assertRaises(AccountSuspended): charge(self.db, self.janet, D('10.00'), 'http://localhost/')
def test_charge_100(self, save): def add_redirect_url_to_payin(payin): payin.SecureModeRedirectURL = 'some url' return payin save.side_effect = add_redirect_url_to_payin with self.assertRaises(Redirect): charge(self.db, self.janet, D('100'), 'http://localhost/') janet = Participant.from_id(self.janet.id) assert self.janet.balance == janet.balance == 0
def test_charge_100(self, Create): def add_redirect_url_to_payin(payin): payin.ExecutionDetails.SecureModeRedirectURL = 'some url' return payin Create.side_effect = add_redirect_url_to_payin with self.assertRaises(Response) as cm: charge(self.db, self.janet, D('100'), 'http://localhost/') r = cm.exception assert r.code == 302 janet = Participant.from_id(self.janet.id) assert self.janet.balance == janet.balance == 0
def test_sync_with_mangopay(self): with mock.patch('liberapay.billing.exchanges.record_exchange_result') as rer: rer.side_effect = Foobar() with self.assertRaises(Foobar): charge(self.db, self.janet, PAYIN_CARD_MIN, 'http://localhost/') exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'pre' sync_with_mangopay(self.db) exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'succeeded' assert Participant.from_username('janet').balance == PAYIN_CARD_MIN
def test_sync_with_mangopay_deletes_charges_that_didnt_happen(self): with mock.patch('liberapay.billing.exchanges.record_exchange_result') as rer \ , mock.patch('liberapay.billing.mangoapi.payIns.Create') as Create: rer.side_effect = Create.side_effect = Foobar with self.assertRaises(Foobar): charge(self.db, self.janet, D('33.67'), 'http://localhost/') exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'pre' sync_with_mangopay(self.db) exchanges = self.db.all("SELECT * FROM exchanges") assert not exchanges assert Participant.from_username('janet').balance == 0
def test_sync_with_mangopay(self): with mock.patch( 'liberapay.billing.exchanges.record_exchange_result') as rer: rer.side_effect = Foobar() with self.assertRaises(Foobar): charge(self.db, self.janet, CHARGE_MIN, 'http://localhost/') exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'pre' sync_with_mangopay(self.db) exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'succeeded' assert Participant.from_username('janet').balance == CHARGE_MIN
def test_sync_with_mangopay_deletes_charges_that_didnt_happen(self): pass # this is for pep8 with mock.patch('liberapay.billing.exchanges.record_exchange_result') as rer, \ mock.patch('liberapay.billing.exchanges.DirectPayIn.save', autospec=True) as save: rer.side_effect = save.side_effect = Foobar with self.assertRaises(Foobar): charge(self.db, self.janet, D('33.67'), 'http://localhost/') exchange = self.db.one("SELECT * FROM exchanges") assert exchange.status == 'pre' sync_with_mangopay(self.db) exchanges = self.db.all("SELECT * FROM exchanges") assert not exchanges assert Participant.from_username('janet').balance == 0
def test_charge_exception(self, test_hook): test_hook.side_effect = Foobar exchange = charge(self.db, self.janet, D('1.00'), 'http://localhost/') assert exchange.note == "Foobar()" assert exchange.amount assert exchange.status == 'failed' janet = Participant.from_id(self.janet.id) assert self.janet.get_credit_card_error() == 'Foobar()' assert self.janet.balance == janet.balance == 0
def test_charge_success_and_wallet_creation(self): self.db.run("UPDATE participants SET mangopay_wallet_id = NULL") self.janet.set_attributes(mangopay_wallet_id=None) exchange = charge(self.db, self.janet, D('1.00'), 'http://localhost/') janet = Participant.from_id(self.janet.id) assert exchange.note is None assert exchange.amount == 10 assert exchange.status == 'succeeded' assert self.janet.balance == janet.balance == 10
def test_charge_failure(self, Create): Create.side_effect = fail_payin exchange = charge(self.db, self.janet, D('1.00'), 'http://localhost/') error = "1: oops" assert exchange.note == error assert exchange.amount assert exchange.status == 'failed' janet = self.janet.refetch() assert self.janet.get_credit_card_error() == error assert self.janet.balance == janet.balance == 0
def test_payout(self): e = charge(self.db, self.janet, D('46.00'), 'http://localhost/') assert e.status == 'succeeded', e.note self.janet.set_tip_to(self.homer, '42.00') self.janet.close('downstream') self.homer = self.homer.refetch() assert self.homer.balance == 46 exchange = payout(self.db, self.homer, D('30.00')) assert exchange.note is None assert exchange.status == 'created' homer = Participant.from_id(self.homer.id) assert self.homer.balance == homer.balance == 16 self.db.self_check()
def test_charge_success_and_wallet_creation(self): self.db.run("UPDATE participants SET mangopay_wallet_id = NULL") self.janet.set_attributes(mangopay_wallet_id=None) exchange = charge(self.db, self.janet, D('50'), 'http://localhost/') janet = Participant.from_id(self.janet.id) assert exchange.note is None assert exchange.amount == 50 assert exchange.status == 'succeeded' assert self.janet.balance == janet.balance == 50 assert janet.withdrawable_balance == 50 with mock.patch.multiple(exchanges, QUARANTINE='1 month'): assert janet.withdrawable_balance == 0 self.db.self_check()
def test_charge_failure(self, Create): def fail_payin(payin): payin.ExecutionDetails.SecureModeRedirectURL = None payin.ResultCode = '1' payin.ResultMessage = 'oops' payin.Status = 'FAILED' return payin Create.side_effect = fail_payin exchange = charge(self.db, self.janet, D('1.00'), 'http://localhost/') error = "1: oops" assert exchange.note == error assert exchange.amount assert exchange.status == 'failed' janet = self.janet.refetch() assert self.janet.get_credit_card_error() == error assert self.janet.balance == janet.balance == 0
def test_charge_invalidated_card(self): bob = self.make_participant('bob', last_bill_result='invalidated') with self.assertRaises(AssertionError): charge(self.db, bob, D('10.00'), 'http://localhost/')
def test_charge_no_card(self): bob = self.make_participant('bob') with self.assertRaises(AssertionError): charge(self.db, bob, D('10.00'), 'http://localhost/')
def test_charge_bad_card(self): self.db.run("UPDATE exchange_routes SET address = '-1'") exchange = charge(self.db, self.janet, D('10.00'), 'http://localhost/') assert 'CardId: The value -1 is not valid' in exchange.note
def test_charge_for_suspicious_raises_UserIsSuspicious(self): bob = self.make_participant('bob', is_suspicious=True, mangopay_user_id='fake_id') with self.assertRaises(UserIsSuspicious): charge(self.db, bob, D('1.00'), 'http://localhost/')