import json import mock import pytest from django.urls import reverse from rest_framework import status from finance import models from progress.models import Progress, ProgressLesson PRICE = 1000.00 METHOD_CASH = 'C' STATUS_WAIT = 'W' STATUS_PAID = 'F' DUMMY_COMMENT = 'test comment' DUMMY_DESCRIPTION = 'test description' mock.patch('lms.global_decorators.transaction_decorator', lambda x: x).start() @pytest.mark.django_db def test_list_bills(api_client, student_client, student, manager, admin_client, manager_client, lead_manager_client, bill_cash): """ Test for get list of bills """ assert api_client.get( reverse('finance:bills'), status=status.HTTP_403_FORBIDDEN ) response = student_client.get( reverse('finance:bills'), status=status.HTTP_200_OK ) results_student = json.loads(response.content) assert len(results_student) is 1 assert results_student[0]['opener'] == manager.email assert results_student[0]['user'] == student.email response_admin = admin_client.get( reverse('finance:bills'), status=status.HTTP_200_OK ) results_admin = json.loads(response_admin.content) assert len(results_admin) is 0 response_manager = manager_client.get( reverse('finance:bills'), status=status.HTTP_200_OK ) results_manager = json.loads(response_manager.content) assert results_manager[0]['opener'] == manager.email assert results_manager[0]['user'] == student.email response_lead_manager = lead_manager_client.get( reverse('finance:bills'), status=status.HTTP_200_OK ) results_lead_manager = json.loads(response_lead_manager.content) assert len(results_lead_manager) is 0 @pytest.mark.django_db def test_create_bill(api_client, student_client, manager_client, manager, student, course): """ Test create bill """ data = { 'bill': { 'course_token': course.token.hex, 'opener': manager.email, 'user': student.email, 'comment': DUMMY_COMMENT, 'description': DUMMY_DESCRIPTION }, 'children': [{ 'status': STATUS_WAIT, 'method': METHOD_CASH, 'price': PRICE, 'real_price': PRICE, }] } response = manager_client.post( reverse('finance:bills'), data=data, status=status.HTTP_200_OK ) results = json.loads(response.content) assert models.Bill.objects.get(user=student).id == results['bill']['id'] assert models.Invoice.objects.get( bill=results['bill']['id']).id == results['children'][0]['id'] assert api_client.post( reverse('finance:bills'), data=data, status=status.HTTP_403_FORBIDDEN ) assert student_client.post( reverse('finance:bills'), data=data, status=status.HTTP_403_FORBIDDEN ) @pytest.mark.django_db def test_confirm_pay_manager(manager_client, bill_cash, student): assert Progress.objects.count() is 0 assert ProgressLesson.objects.count() is 0 data = { 'bill': { 'course_token': bill_cash.course_token.hex, 'opener': bill_cash.opener.email, 'user': bill_cash.user.email, 'comment': bill_cash.comment, 'description': bill_cash.description }, 'children': [{ 'status': STATUS_PAID, 'method': METHOD_CASH, 'price': PRICE, 'real_price': PRICE, }] } response = manager_client.post( reverse('finance:bills'), data=data, status=status.HTTP_200_OK ) results = json.loads(response.content) assert models.Bill.objects.get(user=student).id == results['bill']['id'] assert Progress.objects.count() is 1 assert ProgressLesson.objects.count() is 1 progress = Progress.objects.filter(user=bill_cash.user).first() assert Progress.objects.filter(user=bill_cash.user).exists() is True assert ProgressLesson.objects.filter(progress=progress).exists() is True