from django.test import TestCase, Client from django.urls import reverse from django.contrib.auth import get_user_model from booking.models import Booking from common.models import LinesModel, ContainerTypeModel class BookingViewsTestCase(TestCase): def setUp(self): self.client = Client() DepotUser = get_user_model() self.user = DepotUser.objects.create_user(username='testuser', password='password', user_type='EM') self.client.login(username='testuser', password='password') self.line = LinesModel.objects.create(name='Test Line') self.container_type = ContainerTypeModel.objects.create(name='20ft') self.booking = Booking.objects.create( number='BOOK123', container_type=self.container_type, container_count=10, line=self.line, created_by=self.user.id, updated_by=self.user.id ) def test_booking_list_view(self): response = self.client.get(reverse('booking-list')) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'booking/booking-list.html') self.assertContains(response, self.booking.number) def test_booking_create_view(self): response = self.client.post(reverse('booking-create'), { 'number': 'BOOK456', 'container_type': self.container_type.id, 'container_count': 5, 'line': self.line.id, }) self.assertEqual(response.status_code, 302) self.assertTrue(Booking.objects.filter(number='BOOK456').exists()) def test_booking_update_view(self): response = self.client.post(reverse('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')