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

101 lines
5.5 KiB
Python

from django.test import TestCase, Client
from django.urls import reverse, reverse_lazy
from django.contrib.auth import get_user_model
from accounts.models import ClientPermission
from booking.models import Booking
from common.models import LinesModel, ContainerTypeModel, CompanyModel
class BookingViewsTestCase(TestCase):
def setUp(self):
self.company = CompanyModel.objects.create(name='Test Company')
self.line = LinesModel.objects.create(name='Test Line', company_id=self.company.id)
self.container_type = ContainerTypeModel.objects.get(name='20GP')
self.user_password = 'password'
self.client = Client()
DepotUser = get_user_model()
self.user_client_no_rights = DepotUser.objects.create_user(username='user_client_no_rights', password=self.user_password, user_type='CL', email='user_client_no_rights@gmail.com')
self.user_client_all_rights = DepotUser.objects.create_user(username='user_client_all_rights', password=self.user_password, user_type='CL', email='user_client_all_rights@gmail.com', line=self.line, company=self.company)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_view_booking').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_manage_booking').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_view_preinfo').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_manage_preinfo').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_view_payment').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_manage_payment').id)
self.user_client_all_rights.company_permissions.add(ClientPermission.objects.get(codename='can_manage_company_users').id)
self.user_employee_no_rights = DepotUser.objects.create_user(username='user_employee_no_rights', password=self.user_password, user_type='EM', email='user_employee_no_rights@gmail.com')
self.user_employee_all_rights = DepotUser.objects.create_user(username='user_employee_all_rights', password=self.user_password, user_type='EM', email='user_employee_all_rights@gmail.com')
self.user_employee_all_rights.employee_permissions.add(1)
self.user_employee_all_rights.employee_permissions.add(2)
self.user_employee_all_rights.employee_permissions.add(3)
self.user_employee_all_rights.employee_permissions.add(4)
self.user_employee_all_rights.employee_permissions.add(5)
self.booking = Booking.objects.create(
number='BOOK123',
container_type=self.container_type,
container_count=10,
line=self.line,
created_by=self.user_employee_all_rights.id,
updated_by=self.user_employee_all_rights.id,
vehicles='K1,J2,K3',
vehicles_left='K1,J2,K3',
)
def test_employee_booking_list_view__anonymouse_user__expect_redirect_302(self):
response = self.client.get(reverse_lazy('employee_bookings'))
self.assertEqual(response.status_code, 302)
def test_employee_booking_list_view__client_user_login__expect_forbidden_403(self):
self.client.login(username=self.user_client_no_rights.username, password=self.user_password)
response = self.client.get(reverse_lazy('employee_bookings'))
self.assertEqual(response.status_code, 403)
def test_employee_booking_list_view__user_login__expect_redirect_200(self):
self.client.login(username=self.user_employee_no_rights.username, password=self.user_password)
response = self.client.get(reverse_lazy('employee_bookings'))
self.assertEqual(response.status_code, 200)
def test_booking_list_view__user_all_rights__expect_OK(self):
self.client.login(username=self.user_employee_all_rights.username, password=self.user_password)
response = self.client.get(reverse_lazy('employee_bookings'))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'employee/booking-list.html')
self.assertContains(response, self.booking.number)
def test_client_create_booking__expect_redirect_to_booking_list_and_booking_in_db(self):
self.assertTrue( self.user_client_all_rights.has_company_perm('can_manage_booking'))
self.client.login(username=self.user_client_all_rights.username, password=self.user_password)
response = self.client.post(reverse('client_booking_create'), {
'number': 'BOOK456',
'container_type': self.container_type.id,
'container_count': 5,
'line': self.line.id,
'vehicles': 'Truck1,Truck2',
'vehicles_left': 'Truck1,Truck2',
})
self.assertEqual(response.status_code, 302)
self.assertTrue(Booking.objects.filter(number='BOOK456').exists())
def test_booking_update_view(self):
self.client.login(username=self.user_client_all_rights.username, password=self.user_password)
response = self.client.post(reverse('client_booking_update', args=[self.booking.id]), {
'number': 'BOOK123-updated',
'container_type': self.container_type.id,
'container_count': 15,
'line': self.line.id,
})
self.assertEqual(response.status_code, 302)
self.booking.refresh_from_db()
self.assertEqual(self.booking.number, 'BOOK123-updated')