You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

134 lines
4.1 KiB

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