Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from django.test import TestCase, RequestFactory
2from django.urls import reverse
3from rest_framework import status
4from rest_framework.test import APIRequestFactory, force_authenticate
5from datetime import datetime, timezone, timedelta
6from policorp.classViews.availabilityView import AvailabilityView
7from policorp.models import Availability, Location, Task, User, Booking
9class TestAvailabilityView(TestCase):
11 fixtures = ['testsdata.json']
13 task1 = {'id': 1, 'name': 'Device Installation', 'duration': 120}
14 task2 = {'id': 2, 'name': 'Repair', 'duration': 60}
16 maxDiff = None
18 def setUp(self):
19 # Every test needs access to the request factory.
20 self.factory = APIRequestFactory()
22 def test_availabilityView_GET_return_405(self):
23 """ GIVEN ; WHEN GET /policorp/availability/1 ; THEN code 405 should be returned """
24 # Create an instance of a GET request.
25 availabilityid = 1
26 request = self.factory.get(reverse('policorp:availability', kwargs={'availabilityid': availabilityid}))
27 response = AvailabilityView.as_view()(request, availabilityid)
28 self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
30 def test_availabilityView_unauthenticated_delete_request_forbidden(self):
31 """ GIVEN ; WHEN DELETE /policorp/availability/1 unauthenticated ; THEN code 403 should be returned """
32 availabilityid = 1
33 request = self.factory.delete(reverse('policorp:availability', kwargs={'availabilityid': availabilityid}))
34 response = AvailabilityView.as_view()(request, availabilityid)
35 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
37 def test_availabilityView_supervisor_cant_delete_availability(self):
38 """ GIVEN an availability at a not supervised location; WHEN DELETE /policorp/availability/1 ; THEN code 403 should be returned """
40 now = datetime.now(timezone.utc)
41 l1 = Location.objects.get(pk=1)
42 task_name = "Device Installation for Trucks"
43 t1 = Task.objects.create_task(task_name, 120)
44 a1 = Availability.objects.create_availability(now + timedelta(minutes = 60), l1, t1)
45 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
47 availabilityid = a1.id
48 request = self.factory.delete(reverse('policorp:availability', kwargs={'availabilityid': availabilityid}))
49 force_authenticate(request, user=u1)
50 response = AvailabilityView.as_view()(request, availabilityid)
51 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
53 def test_availabilityView_supervisor_deletes_availability(self):
54 """ GIVEN an availability in a supervised location; WHEN DELETE /policorp/availability/1 ; THEN code 204 should be returned """
56 now = datetime.now(timezone.utc)
57 l1 = Location.objects.get(pk=1)
58 task_name = "Device Installation for Trucks"
59 t1 = Task.objects.create_task(task_name, 120)
60 a1 = Availability.objects.create_availability(now + timedelta(minutes = 60), l1, t1)
61 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
62 l1.assign_supervisor(u1)
64 availabilityid = a1.id
65 request = self.factory.delete(reverse('policorp:availability', kwargs={'availabilityid': availabilityid}))
66 force_authenticate(request, user=u1)
67 response = AvailabilityView.as_view()(request, availabilityid)
68 self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
70 def test_availabilityView_cant_delete_if_booked(self):
71 """ GIVEN a booked availability; WHEN DELETE /policorp/availability/1 ; THEN code 409 should be returned """
73 now = datetime.now(timezone.utc)
74 l1 = Location.objects.get(pk=1)
75 task_name = "Device Installation for Trucks"
76 t1 = Task.objects.create_task(task_name, 120)
77 a1 = Availability.objects.create_availability(now + timedelta(minutes = 60), l1, t1)
78 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
79 l1.assign_supervisor(u1)
80 booking = Booking.objects.book(a1, u1)
82 availabilityid = a1.id
83 request = self.factory.delete(reverse('policorp:availability', kwargs={'availabilityid': availabilityid}))
84 force_authenticate(request, user=u1)
85 response = AvailabilityView.as_view()(request, availabilityid)
86 self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
87 response.render()
88 self.assertJSONEqual(str(response.content, encoding='utf8'), {"detail": "Availability is already booked."})