def test_payment_get_paid(self, mock_Request): Payment = apps.get_model("getpaid", "Payment") order = Order(name="Test EUR order", total="123.45", currency="PLN") order.save() payment = Payment( pk=99, order=order, amount=order.total, currency=order.currency, backend="getpaid.backends.payu" ) payment.save(force_insert=True) payment = Payment.objects.get( pk=99 ) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status(u"99:1342616247.41") self.assertEqual(payment.status, u"paid") self.assertNotEqual(payment.paid_on, None) self.assertNotEqual(payment.amount_paid, Decimal("0")) url = "https://www.platnosci.pl/paygw/UTF/Payment/get/txt" callargs = mock_Request.call_args_list self.assertEqual(url, callargs[0][0][0]) if six.PY3: self.assertIsInstance(callargs[0][0][1], bytes) self.assertTrue(b"pos_id=123456789" in callargs[0][0][1]) self.assertTrue(b"session_id=99%3A1342616247.41" in callargs[0][0][1]) else: self.assertIsInstance(callargs[0][0][1], str) self.assertTrue("pos_id=123456789" in callargs[0][0][1]) self.assertTrue("session_id=99%3A1342616247.41" in callargs[0][0][1])
def test_payment_get_paid(self, mock_Request): Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(pk=99, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) payment = Payment.objects.get( pk=99 ) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status(u'99:1342616247.41') self.assertEqual(payment.status, u'paid') self.assertNotEqual(payment.paid_on, None) self.assertNotEqual(payment.amount_paid, Decimal('0')) url = 'https://www.platnosci.pl/paygw/UTF/Payment/get/txt' callargs = mock_Request.call_args_list self.assertEqual(url, callargs[0][0][0]) if six.PY3: self.assertIsInstance(callargs[0][0][1], bytes) self.assertTrue(b'pos_id=123456789' in callargs[0][0][1]) self.assertTrue( b'session_id=99%3A1342616247.41' in callargs[0][0][1]) else: self.assertIsInstance(callargs[0][0][1], str) self.assertTrue('pos_id=123456789' in callargs[0][0][1]) self.assertTrue( 'session_id=99%3A1342616247.41' in callargs[0][0][1])
def test_payment_get_paid(self, mock_Request): Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(pk=99, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) payment = Payment.objects.get( pk=99) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status(u'99:1342616247.41') self.assertEqual(payment.status, u'paid') self.assertNotEqual(payment.paid_on, None) self.assertNotEqual(payment.amount_paid, Decimal('0')) url = 'https://www.platnosci.pl/paygw/UTF/Payment/get/txt' callargs = mock_Request.call_args_list self.assertEqual(url, callargs[0][0][0]) if six.PY3: self.assertIsInstance(callargs[0][0][1], bytes) self.assertTrue(b'pos_id=123456789' in callargs[0][0][1]) self.assertTrue(b'session_id=99%3A1342616247.41' in callargs[0][0][1]) else: self.assertIsInstance(callargs[0][0][1], str) self.assertTrue('pos_id=123456789' in callargs[0][0][1]) self.assertTrue('session_id=99%3A1342616247.41' in callargs[0][0][1])
def test_failure_order_additional_validation(self): """ Tests if HTTP304 when order additional validation signal raises ValidationError exception. """ def custom_validation_listener(sender=None, request=None, order=None, backend=None, **kwargs): raise ValidationError("BOOM!") suid = 'test-order_additional_validation' signals.order_additional_validation.connect(custom_validation_listener, dispatch_uid=suid) order = Order(name='Test order custom validation', total=100, currency='PLN') order.save() try: url = reverse('getpaid:new-payment', kwargs={'currency': 'PLN'}) data = {'order': order.pk, 'backend': 'getpaid.backends.payu'} response = self.client.post(url, data) self.assertEqual(response.status_code, 403) finally: signals.order_additional_validation.disconnect(dispatch_uid=suid)
def test_online_payment_failure(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) self.assertEqual('TRUE', getpaid.backends.transferuj.PaymentProcessor.online('195.149.229.109', '1234', '1', '', payment.pk, '123.45', '23.45', '', False, 0, '', '21b028c2dbdcb9ca272d1cc67ed0574e')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'failed')
def test_online_payment_failure(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='RUB') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.platron') payment.save(force_insert=True) self.assertEqual('OK', getpaid.backends.platron.PaymentProcessor.online(self.xml_result % (payment.pk, '0', '84c11ec90ac8a6f637e3adfa912bab60'), 'result.php')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'failed')
def setUp(self): self.client = Client() Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test DKK order', total='123.45', currency='DKK') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.epaydk') payment.save() self.test_payment = Payment.objects.get(pk=payment.id)
def test_failure_create_payment_eur(self): """ Tests if payment fails when wrong currency for backend. PayU accepts only PLN currency payments. """ order = Order(name='Test EUR order', total=100, currency='EUR') order.save() response = self.client.post(reverse('getpaid-new-payment', kwargs={'currency': 'EUR'}), {'order': order.pk, 'backend': 'getpaid.backends.payu'}) self.assertEqual(response.status_code, 403)
def test_payment_get_failed(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(pk=98, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) payment = Payment.objects.get(pk=98) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status('98:1342616247.41') self.assertEqual(payment.status, 'failed') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('0'))
def test_online_payment_failure(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) self.assertEqual('TRUE', transferuj.PaymentProcessor.online('195.149.229.109', '1234', '1', '', payment.pk, '123.45', '23.45', '', False, 0, '', '21b028c2dbdcb9ca272d1cc67ed0574e')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'failed')
def test_get_payment_status_failed(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test PLN order', total='123.45', currency='PLN') order.save() payment = Payment(pk=192, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.przelewy24') payment.save(force_insert=True) payment = Payment.objects.get(pk=192) processor = getpaid.backends.przelewy24.PaymentProcessor(payment) processor.get_payment_status(p24_session_id='192:xxx:xxx', p24_order_id='192:external', p24_kwota='12245') self.assertEqual(payment.status, 'failed') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('0.0'))
def setUp(self): self.client = Client() Payment = get_model('getpaid', 'Payment') order = Order(name='Test DKK order', total='123.45', currency='BRL') order.save() payment = Payment( external_id="REF1234", order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.pagseguro') payment.save() self.test_payment = Payment.objects.get(pk=payment.id)
def test_online_payment_ok(self): Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) self.assertEqual('TRUE', PaymentProcessor.online('195.149.229.109', '1234', '1', '', payment.pk, '123.45', '123.45', '', 'TRUE', 0, '', '21b028c2dbdcb9ca272d1cc67ed0574e')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'paid') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('123.45'))
def test_online_payment_partial(self): Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) self.assertEqual('TRUE', PaymentProcessor.online('195.149.229.109', '1234', '1', '', payment.pk, '123.45', '23.45', '', 'TRUE', 0, '', '21b028c2dbdcb9ca272d1cc67ed0574e')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'partially_paid') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('23.45'))
def test_payment_get_failed(self): Payment = apps.get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='PLN') order.save() payment = Payment(pk=98, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payu') payment.save(force_insert=True) payment = Payment.objects.get( pk=98) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status(u'98:1342616247.41') self.assertEqual(payment.status, u'failed') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('0'))
def test_get_payment_status_failed(self): Payment = apps.get_model("getpaid", "Payment") order = Order(name="Test PLN order", total="123.45", currency="PLN") order.save() payment = Payment( pk=192, order=order, amount=order.total, currency=order.currency, backend="getpaid.backends.przelewy24" ) payment.save(force_insert=True) payment = Payment.objects.get(pk=192) processor = getpaid.backends.przelewy24.PaymentProcessor(payment) processor.get_payment_status(p24_session_id=u"192:xxx:xxx", p24_order_id=u"192:external", p24_kwota=u"12245") self.assertEqual(payment.status, u"failed") self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal("0.0"))
def test_success_init_payment(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='RUB') order.save() payment = Payment(pk=99, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.platron') payment.save(force_insert=True) payment = Payment.objects.get(pk=99) processor = getpaid.backends.platron.PaymentProcessor(payment) fake_request = RequestFactory() ip = {'REMOTE_ADDR': '123.123.123.123'} setattr(fake_request, 'META', ip) url, method, params = processor.get_gateway_url(fake_request) self.assertEqual(url, 'https://www.platron.ru/payment_params.php?customer=ccaa41a4f425d124a23c3a53a3140bdc15826')
def test_get_payment_status_success(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test PLN order', total='123.45', currency='PLN') order.save() payment = Payment(pk=191, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.przelewy24') payment.save(force_insert=True) payment = Payment.objects.get(pk=191) processor = getpaid.backends.przelewy24.PaymentProcessor(payment) processor.get_payment_status(p24_session_id=u'191:xxx:xxx', p24_order_id=u'191:external', p24_kwota=u'12345') self.assertEqual(payment.status, 'paid') self.assertEqual(payment.external_id, '191:external') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('123.45'))
def test_payment_get_failed(self): Payment = apps.get_model("getpaid", "Payment") order = Order(name="Test EUR order", total="123.45", currency="PLN") order.save() payment = Payment( pk=98, order=order, amount=order.total, currency=order.currency, backend="getpaid.backends.payu" ) payment.save(force_insert=True) payment = Payment.objects.get( pk=98 ) # this line is because django bug https://code.djangoproject.com/ticket/5903 processor = getpaid.backends.payu.PaymentProcessor(payment) processor.get_payment_status(u"98:1342616247.41") self.assertEqual(payment.status, u"failed") self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal("0"))
def test_fail_init_payment(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='123.45', currency='RUB') order.save() payment = Payment(pk=99, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.platron') payment.save(force_insert=True) payment = Payment.objects.get(pk=99) processor = getpaid.backends.platron.PaymentProcessor(payment) fake_request = RequestFactory() ip = {'REMOTE_ADDR': '123.123.123.123'} setattr(fake_request, 'META', ip) setattr(fake_request, 'path', '/getpaid.backends.platron/failure/') url, method, params = processor.get_gateway_url(fake_request) self.assertEqual(url, '/getpaid.backends.platron/failure/?pg_error_code=101&pg_order_id=99&pg_error_description=Empty+merchant')
def test_successful_create_payment_payu_pln(self): """ Tests if payment is successfully created """ order = Order(name='Test PLN order', total=100, currency='PLN') order.save() test_url = reverse('getpaid:new-payment', kwargs={'currency': 'PLN'}) data = {'order': order.pk, 'backend': 'getpaid.backends.payu'} response = self.client.post(test_url, data) self.assertEqual(response.status_code, 302) Payment = apps.get_model('getpaid', 'Payment') payment = Payment.objects.get(order=order.pk) self.assertEqual(payment.backend, 'getpaid.backends.payu') self.assertEqual(payment.amount, order.total) self.assertEqual(payment.currency, order.currency) self.assertEqual(payment.status, 'in_progress') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, 0)
def test_successful_create_payment_dummy_eur(self): """ Tests if payment is successfully created """ order = Order(name='Test EUR order', total=100, currency='EUR') order.save() url = reverse('getpaid-new-payment', kwargs={'currency': 'EUR'}) data = {'order': order.pk, 'backend': 'getpaid.backends.dummy'} response = self.client.post(url, data) self.assertEqual(response.status_code, 302) Payment = get_model('getpaid', 'Payment') payment = Payment.objects.get(order=order.pk) self.assertEqual(payment.backend, 'getpaid.backends.dummy') self.assertEqual(payment.amount, order.total) self.assertEqual(payment.currency, order.currency) self.assertEqual(payment.status, 'in_progress') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, 0)
def test_successful_create_payment_payu_pln(self): """ Tests if payment is successfully created """ order = Order(name='Test PLN order', total=100, currency='PLN') order.save() response = self.client.post(reverse('getpaid-new-payment', kwargs={'currency': 'PLN'}), {'order': order.pk, 'backend': 'getpaid.backends.payu'} ) self.assertEqual(response.status_code, 302) Payment = apps.get_model('getpaid', 'Payment') payment = Payment.objects.get(order=order.pk) self.assertEqual(payment.backend, 'getpaid.backends.payu') self.assertEqual(payment.amount, order.total) self.assertEqual(payment.currency, order.currency) self.assertEqual(payment.status, 'in_progress') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, 0)
def test_online_payment_ok(self): Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='100.00', currency='RUB') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.platron') payment.save(force_insert=True) self.assertEqual('OK', getpaid.backends.platron.PaymentProcessor.online(self.xml_result % (payment.pk, '1', 'e668147fe238a3053d7aa1328749d31d'), 'result.php')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'paid') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('100.00')) # repeat payment = Payment.objects.get(pk=payment.pk) self.assertEqual('OK', getpaid.backends.platron.PaymentProcessor.online(self.xml_result % (payment.pk, '1', 'e668147fe238a3053d7aa1328749d31d'), 'result.php')) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'paid') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('100.00'))
def test_successful_create_payment_dummy_eur(self): """ Tests if payment is successfully created """ order = Order(name='Test EUR order', total=100, currency='EUR') order.save() response = self.client.post( reverse('getpaid-new-payment', kwargs={'currency': 'EUR'}), { 'order': order.pk, 'backend': 'getpaid.backends.dummy' }) self.assertEqual(response.status_code, 302) Payment = get_model('getpaid', 'Payment') payment = Payment.objects.get(order=order.pk) self.assertEqual(payment.backend, 'getpaid.backends.dummy') self.assertEqual(payment.amount, order.total) self.assertEqual(payment.currency, order.currency) self.assertEqual(payment.status, 'in_progress') self.assertEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, 0)
def test_online_crc_error(self): params = { 'command': 'CHECK', 'id': '1234', 'transaction_id': 'xxx', 'operation_id': '5678', 'amount': '123.00', 'currency_code': 'RUB', 'test_mode': '0', 'signature': '2c7ead8d6aef684842edb2806b4cb178', } self.assertEqual('FAIL CRC ERR', getpaid.backends.payanyway.PaymentProcessor.online(**params)) Payment = get_model('getpaid', 'Payment') order = Order(name='Test transaction_id', total='123.00', currency='RUB') order.save() payment = Payment(pk=1234, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payanyway') payment.save(force_insert=True) params['transaction_id'] = '1234' params['signature'] = '102153d9e5b8e97e7f0d608448e3e18f' self.assertNotEqual('FAIL CRC ERR', getpaid.backends.payanyway.PaymentProcessor.online(**params))
def test_online_payment_ok(self): params = { 'command': '', 'id': '1234', 'transaction_id': '1234', 'operation_id': '5678', 'amount': '123.00', 'currency_code': 'RUB', 'test_mode': '0', 'signature': 'dd0c3cb8216302bbd3a1aa21518667bc', } Payment = get_model('getpaid', 'Payment') order = Order(name='Test pay', total='123.00', currency='RUB') order.save() payment = Payment(pk=1234, order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.payanyway') payment.save(force_insert=True) self.assertEqual('SUCCESS', getpaid.backends.payanyway.PaymentProcessor.online(**params)) payment = Payment.objects.get(pk=payment.pk) self.assertEqual(payment.status, 'paid') self.assertNotEqual(payment.paid_on, None) self.assertEqual(payment.amount_paid, Decimal('123.00'))
def test_send_response(self): check_url = reverse('getpaid:platron:check') result_url = reverse('getpaid:platron:result') response = self.client.post(check_url, {'pg_xml': self.xml_check % ('1234', 'RUR', 'xxxx')}) self.assertContains(response, '<pg_status>error</pg_status>') response = self.client.post(check_url, {'pg_xml': self.xml_check % ('1234', 'EUR', '78ae32e1e005d37d56be3342a292050b')}) self.assertContains(response, '<pg_status>error</pg_status>') response = self.client.post(check_url, {'pg_xml': self.xml_check % ('1111', 'RUR', 'e2947c340f12b8878fd86decdf09df37')}) self.assertContains(response, '<pg_status>error</pg_status>') #TODO: with payment #response = self.client.post(check_url, {'pg_xml': self.xml_check % ('1234', 'RUR', 'ed57bad3c1b30649033bb7b3e3d33b86')}) #self.assertContains(response, '<pg_status>ok</pg_status>') Payment = get_model('getpaid', 'Payment') order = Order(name='Test EUR order', total='100.00', currency='RUB') order.save() payment = Payment(order=order, amount=order.total, currency=order.currency, backend='getpaid.backends.platron') payment.save(force_insert=True) response = self.client.post(result_url, {'pg_xml': self.xml_result % (payment.pk, '1', '9b1a28ddd3a7317c5916a0bf42b2756c')}) self.assertContains(response, '<pg_status>ok</pg_status>')
def test_order_view(self): order = Order(name='Test EUR order', total=100, currency='EUR') order.save() resp = self.client.get(order.get_absolute_url()) self.assertEqual(200, resp.status_code) self.assertTemplateUsed(resp, 'orders/order_detail.html')
def test_order_view(self): order = Order(name='Test EUR order', total=100, currency='EUR') order.save() self.assertTemplateUsed(self.client.get(order.get_absolute_url()), 'orders/order_detail.html')