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