def _test_payin_bank_wire_callback_amount_mismatch(self, Get, fee): homer = self.homer route = ExchangeRoute.insert(homer, 'mango-bw', 'x') e_id = record_exchange(self.db, route, 11, 0, 0, homer, 'pre') assert homer.balance == 0 homer.close(None) assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_SUCCEEDED&RessourceId=123456790" payin = BankWirePayIn() payin.Status = 'SUCCEEDED' payin.ResultCode = '000000' payin.ResultMessage = None payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DeclaredDebitedFunds = Money(4500, 'EUR') payin.DeclaredFees = Money(100, 'EUR') payin.DebitedFunds = Money(302, 'EUR') payin.Fees = Money(fee, 'EUR') payin.CreditedFunds = Money(302 - fee, 'EUR') payin.Tag = str(e_id) Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text e = self.db.one("SELECT * FROM exchanges WHERE id = %s", (e_id, )) assert e.amount == D(payin.CreditedFunds.Amount) / D(100) assert e.fee == D(fee) / D(100) assert e.vat == D('0.01') assert e.status == 'succeeded' homer = homer.refetch() assert homer.balance == e.amount assert homer.status == 'active' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email assert 'succ' in emails[0]['subject']
def test_payin_bank_wire_callback_unexpected(self, Get): homer = self.homer cases = ( ('failed', '000001', 'FOO', 0), ('succeeded', '000000', None, 5), ('succeeded', '000000', None, 2), ) for status, result_code, error, fee in cases: status_up = status.upper() homer.set_tip_to(self.janet, EUR('1.00')) homer.close('downstream') assert homer.balance == 0 assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_" + status_up + "&RessourceId=123456790" payin = BankWirePayIn(Id=-1) payin.Status = status_up payin.ResultCode = result_code payin.ResultMessage = error payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DebitedFunds = Money(242, 'EUR') payin.DeclaredDebitedFunds = payin.DebitedFunds payin.DeclaredFees = Money(fee, 'EUR') payin.Fees = Money(fee, 'EUR') payin.CreditedFunds = Money(0, 'XXX') if error else Money( 242 - fee, 'EUR') payin.CreditedWalletId = self.homer_wallet_id Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text amount = EUR(242 - fee) / 100 e = self.db.one( "SELECT * FROM exchanges ORDER BY timestamp DESC lIMIT 1") assert e.status == status assert e.amount == amount assert e.fee == EUR(fee) / 100 homer = homer.refetch() if status == 'succeeded': assert homer.balance == amount assert homer.status == 'active' else: assert homer.balance == 0 assert homer.status == 'closed' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email assert status[:4] in emails[0]['subject'] self.db.self_check() homer.update_status('active') # reset for next loop run
def test_payin_bank_wire_callback_unexpected(self, Get): homer = self.homer cases = ( ('failed', '000001', 'FOO', 0), ('succeeded', '000000', None, 5), ('succeeded', '000000', None, 2), ) for status, result_code, error, fee in cases: status_up = status.upper() homer.set_tip_to(self.janet, EUR('1.00')) homer.close('downstream') assert homer.balance == 0 assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_"+status_up+"&RessourceId=123456790" payin = BankWirePayIn(Id=-1) payin.Status = status_up payin.ResultCode = result_code payin.ResultMessage = error payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DebitedFunds = Money(242, 'EUR') payin.DeclaredDebitedFunds = payin.DebitedFunds payin.DeclaredFees = Money(fee, 'EUR') payin.Fees = Money(fee, 'EUR') payin.CreditedFunds = Money(0, 'XXX') if error else Money(242 - fee, 'EUR') payin.CreditedWalletId = self.homer_wallet_id Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text amount = D(242 - fee) / D(100) e = self.db.one("SELECT * FROM exchanges ORDER BY timestamp DESC lIMIT 1") assert e.status == status assert e.amount == amount assert e.fee == D(fee) / D(100) homer = homer.refetch() if status == 'succeeded': assert homer.balance == amount assert homer.status == 'active' else: assert homer.balance == 0 assert homer.status == 'closed' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email assert status[:4] in emails[0]['subject'] self.db.self_check() homer.update_status('active') # reset for next loop run
def test_payin_bank_wire_callback(self, Get): homer = self.homer route = ExchangeRoute.insert(homer, 'mango-bw', 'x', 'chargeable') cases = ( ('failed', '000001', 'FOO'), ('failed', '101109', 'The payment period has expired'), ('succeeded', '000000', None), ) for status, result_code, error in cases: status_up = status.upper() e_id = record_exchange(self.db, route, EUR(11), EUR(0), EUR(0), homer, 'pre').id assert homer.balance == 0 homer.close(None) assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_" + status_up + "&RessourceId=123456790" payin = BankWirePayIn(Id=-1) payin.Status = status_up payin.ResultCode = result_code payin.ResultMessage = error payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DeclaredDebitedFunds = Money(1100, 'EUR') payin.DeclaredFees = Money(0, 'EUR') payin.CreditedFunds = Money(0, 'XXX') if error else Money( 1100, 'EUR') payin.Tag = str(e_id) Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text homer = homer.refetch() if status == 'succeeded': assert homer.balance == 11 assert homer.status == 'active' else: assert homer.balance == 0 assert homer.status == 'closed' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email expected = 'expired' if result_code == '101109' else status[:4] assert expected in emails[0]['subject'] self.db.self_check() homer.update_status('active') # reset for next loop run
def test_payin_bank_wire_callback(self, Get): homer = self.homer route = ExchangeRoute.insert(homer, 'mango-bw', 'x') cases = ( ('failed', '000001', 'FOO'), ('failed', '101109', 'The payment period has expired'), ('succeeded', '000000', None), ) for status, result_code, error in cases: status_up = status.upper() e_id = record_exchange(self.db, route, EUR(11), EUR(0), EUR(0), homer, 'pre').id assert homer.balance == 0 homer.close(None) assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_"+status_up+"&RessourceId=123456790" payin = BankWirePayIn(Id=-1) payin.Status = status_up payin.ResultCode = result_code payin.ResultMessage = error payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DeclaredDebitedFunds = Money(1100, 'EUR') payin.DeclaredFees = Money(0, 'EUR') payin.CreditedFunds = Money(0, 'XXX') if error else Money(1100, 'EUR') payin.Tag = str(e_id) Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text homer = homer.refetch() if status == 'succeeded': assert homer.balance == 11 assert homer.status == 'active' else: assert homer.balance == 0 assert homer.status == 'closed' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email expected = 'expired' if result_code == '101109' else status[:4] assert expected in emails[0]['subject'] self.db.self_check() homer.update_status('active') # reset for next loop run
def test_payin_bank_wire_callback(self, Get): homer = self.homer route = ExchangeRoute.insert(homer, 'mango-bw', 'x') for status in ('failed', 'succeeded'): status_up = status.upper() error = 'FOO' if status == 'failed' else None e_id = record_exchange(self.db, route, 11, 0, 0, homer, 'pre') assert homer.balance == 0 homer.close(None) assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_"+status_up+"&RessourceId=123456790" payin = BankWirePayIn() payin.Status = status_up payin.ResultCode = '000001' if error else '000000' payin.ResultMessage = error payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DeclaredDebitedFunds = Money(1100, 'EUR') payin.DeclaredFees = Money(0, 'EUR') payin.CreditedFunds = Money(0, 'XXX') if error else Money(1100, 'EUR') payin.Tag = str(e_id) Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text homer = homer.refetch() if status == 'succeeded': assert homer.balance == 11 assert homer.status == 'active' else: assert homer.balance == 0 assert homer.status == 'closed' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email assert status[:4] in emails[0]['subject'] self.db.self_check() homer.update_status('active') # reset for next loop run
def _test_payin_bank_wire_callback_amount_mismatch(self, Get, fee): homer = self.homer route = ExchangeRoute.insert(homer, 'mango-bw', 'x') e_id = record_exchange(self.db, route, EUR(11), EUR(0), EUR(0), homer, 'pre').id assert homer.balance == 0 homer.close(None) assert homer.status == 'closed' qs = "EventType=PAYIN_NORMAL_SUCCEEDED&RessourceId=123456790" payin = BankWirePayIn(Id=-1) payin.Status = 'SUCCEEDED' payin.ResultCode = '000000' payin.ResultMessage = None payin.AuthorId = homer.mangopay_user_id payin.PaymentType = 'BANK_WIRE' payin.DeclaredDebitedFunds = Money(4500, 'EUR') payin.DeclaredFees = Money(100, 'EUR') payin.DebitedFunds = Money(302, 'EUR') payin.Fees = Money(fee, 'EUR') payin.CreditedFunds = Money(302 - fee, 'EUR') payin.Tag = str(e_id) Get.return_value = payin r = self.callback(qs) assert r.code == 200, r.text e = self.db.one("SELECT * FROM exchanges WHERE id = %s", (e_id,)) assert e.amount == D(payin.CreditedFunds.Amount) / D(100) assert e.fee == D(fee) / D(100) assert e.vat == D('0.01') assert e.status == 'succeeded' homer = homer.refetch() assert homer.balance == e.amount assert homer.status == 'active' emails = self.get_emails() assert len(emails) == 1 assert emails[0]['to'][0] == 'homer <%s>' % homer.email assert 'succ' in emails[0]['subject'] self.db.self_check()