From 01ba718ad4c2cf7a55cb783941dc598d09709888 Mon Sep 17 00:00:00 2001 From: Dmitriy Shesterkin Date: Mon, 12 Mar 2018 11:07:55 +0300 Subject: [PATCH] add test yandex pay --- tests/fixtures/finance.py | 38 +++++++++++++++++++-- tests/test_finance.py | 70 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 101 insertions(+), 7 deletions(-) diff --git a/tests/fixtures/finance.py b/tests/fixtures/finance.py index 9de032b..ab73d57 100644 --- a/tests/fixtures/finance.py +++ b/tests/fixtures/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 diff --git a/tests/test_finance.py b/tests/test_finance.py index b118674..4bf0dd4 100644 --- a/tests/test_finance.py +++ b/tests/test_finance.py @@ -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