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
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
|
|
|