add test yandex pay

remotes/origin/feature/test_courses
Dmitriy Shesterkin 8 years ago
parent 62d749222e
commit 01ba718ad4
  1. 38
      tests/fixtures/finance.py
  2. 70
      tests/test_finance.py

@ -1,6 +1,14 @@
import pytest
from yandex_money.models import Payment
from factories.finance import BillFactory, InvoiceFactory
from factories.finance import BillFactory, InvoiceFactory, PaymentFactory
PRICE = 1000.00
METHOD_CASH = 'C'
METHOD_YANDEX = 'Y'
STATUS_WAIT = 'W'
STATUS_ON_PAYMENT = 'P'
STATUS_PAID = 'F'
@pytest.fixture
@ -13,9 +21,33 @@ def bill_cash(student, manager):
opener=manager,
)
InvoiceFactory(
status='P',
method='C',
status=STATUS_ON_PAYMENT,
method=METHOD_CASH,
yandex_pay=None,
bill=_bill
)
return _bill
@pytest.fixture
def bill_yandex(student, manager):
"""
Create bill for the student
"""
_bill = BillFactory(
user=student,
opener=manager,
)
# credit cart
payment = PaymentFactory(
user=student,
payment_type=Payment.PAYMENT_TYPE.AC,
status=Payment.STATUS.PROCESSED
)
InvoiceFactory(
status=STATUS_ON_PAYMENT,
method=METHOD_YANDEX,
yandex_pay=payment,
bill=_bill
)
return _bill

@ -6,14 +6,14 @@ import pytest
from django.urls import reverse
from rest_framework import status
from rest_framework.response import Response
from yandex_money.models import Payment
from finance import models
from progress.models import Progress, ProgressLesson
PRICE = 1000.00
METHOD_CASH = 'C'
STATUS_WAIT = 'W'
STATUS_PAID = 'F'
from tests.fixtures.finance import PRICE, METHOD_CASH, STATUS_WAIT, STATUS_PAID
DUMMY_COMMENT = 'test comment'
DUMMY_DESCRIPTION = 'test description'
@ -134,3 +134,65 @@ def test_confirm_pay_manager(mocked_email, manager_client, bill_cash, student):
assert Progress.objects.filter(user=bill_cash.user).exists() is True
assert ProgressLesson.objects.filter(progress=progress).exists() is True
assert mocked_email.call_count == 1
def fake_post_success(view, request):
pay = Payment.objects.get(order_number=request.data['orderNumber'])
pay.status = Payment.STATUS.SUCCESS
pay.save()
return Response('ok', status=status.HTTP_200_OK)
@pytest.mark.django_db
@mock.patch('django.core.mail.EmailMessage.send')
@mock.patch('finance.views.YandexAvisoView.post', fake_post_success)
def test_confirm_pay_auto_success(mocked_email, api_client, bill_yandex, student):
assert Progress.objects.count() is 0
assert ProgressLesson.objects.count() is 0
invoice = bill_yandex.invoice_set.first()
payment = invoice.yandex_pay
data = {
'orderNumber': payment.order_number,
'shopSumAmount': str(payment.shop_amount)
}
api_client.post(
reverse('yandex_money_notice'),
data=data,
status=status.HTTP_200_OK
)
assert Progress.objects.count() is 1
assert ProgressLesson.objects.count() is 1
progress = Progress.objects.filter(user=bill_yandex.user).first()
assert Progress.objects.filter(user=bill_yandex.user).exists() is True
assert ProgressLesson.objects.filter(progress=progress).exists() is True
assert mocked_email.call_count == 1
def fake_post_fail(view, request):
pay = Payment.objects.get(order_number=request.data['orderNumber'])
pay.status = Payment.STATUS.FAIL
pay.save()
return Response('fail', status=status.HTTP_200_OK)
@pytest.mark.django_db
@mock.patch('django.core.mail.EmailMessage.send')
@mock.patch('finance.views.YandexAvisoView.post', fake_post_fail)
def test_confirm_pay_auto_fail(mocked_email, api_client, bill_yandex, student):
assert Progress.objects.count() is 0
assert ProgressLesson.objects.count() is 0
invoice = bill_yandex.invoice_set.first()
payment = invoice.yandex_pay
data = {
'orderNumber': payment.order_number,
'shopSumAmount': str(payment.shop_amount)
}
api_client.post(
reverse('yandex_money_notice'),
data=data,
status=status.HTTP_200_OK
)
assert Progress.objects.count() is 0
assert ProgressLesson.objects.count() is 0
assert Progress.objects.filter(user=bill_yandex.user).exists() is False
assert mocked_email.call_count == 1

Loading…
Cancel
Save