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
2from datetime import datetime
3from django.utils import timezone
4from policorp.models import Availability, Booking
5from policorp.tests import aux
6import json
8class TestBooking(TestCase):
10 fixtures = ['testsdata.json']
12 def test_book_availability_user(self):
13 """ Booking an availability registers who boooked it """
14 availability = Availability.objects.get(pk=1)
15 user = aux.createUser("foo", "foo@example.com", "example")
16 b = Booking.objects.book(availability, user)
17 self.assertEqual(len(Booking.objects.filter(availability=availability)), 1)
18 self.assertEqual(Booking.objects.filter(availability=availability)[0].user, user)
20 def test_book_availability_is_booked(self):
21 """ Booking an availability marks it as booked """
22 availability = Availability.objects.get(pk=1)
23 user = aux.createUser("foo", "foo@example.com", "example")
24 b = Booking.objects.book(availability, user)
25 availability = Availability.objects.get(pk=1)
26 self.assertTrue(availability.booked)
28 def test_booking_serialize_json(self):
29 """ GIVEN a booking; WHEN requesting json serialization; THEN it should be returned in json format """
30 availability = Availability.objects.get(pk=1)
31 user = aux.createUser("foo", "foo@example.com", "example")
32 booking = Booking.objects.book(availability, user)
34 expected_json = {'id': 1, 'availability': availability.json(), 'username': user.username }
36 self.assertEqual(booking.json()["availability"] , expected_json["availability"])
37 self.assertEqual(booking.json()["username"], expected_json["username"])
39 def test_booking_get_my_bookings(self):
40 """ GIVEN 2 bookings, 1 for user foo and 1 for user juan; WHEN requesting user bookings for foo; THEN 1 booking with user foo should be returned """
41 availability1 = Availability.objects.get(pk=1)
42 user1 = aux.createUser("foo", "foo@example.com", "example")
43 b1 = Booking.objects.book(availability1, user1)
44 availability2 = Availability.objects.get(pk=2)
45 user2 = aux.createUser("juan", "juan@example.com", "example")
46 b2 = Booking.objects.book(availability2, user2)
47 bookingsforfoo = Booking.objects.get_by_user(user1)
49 self.assertEqual(len(bookingsforfoo), 1)
50 self.assertEqual(bookingsforfoo[0].user, user1)
52 def test_booking_get_my_bookings_ordered(self):
53 """ GIVEN 2 bookings for user foo; WHEN requesting bookings for user foo; THEN 2 bookings should be returned ordered by ascending availability date """
54 user1 = aux.createUser("foo", "foo@example.com", "example")
55 availability1 = Availability.objects.get(pk=2)
56 b1 = Booking.objects.book(availability1, user1)
57 availability2 = Availability.objects.get(pk=1)
58 b2 = Booking.objects.book(availability2, user1)
59 bookingsforfoo = Booking.objects.get_by_user(user1)
61 self.assertEqual(len(bookingsforfoo), 2)
62 self.assertTrue(bookingsforfoo[0].availability.when < bookingsforfoo[1].availability.when)
64 def test_booking_get_my_bookings_ordered_2(self):
65 """ GIVEN 2 bookings for user foo; WHEN requesting bookings for user foo; THEN 2 bookings should be returned ordered by ascending availability date """
66 user1 = aux.createUser("foo", "foo@example.com", "example")
67 availability1 = Availability.objects.get(pk=1)
68 b1 = Booking.objects.book(availability1, user1)
69 availability2 = Availability.objects.get(pk=2)
70 b2 = Booking.objects.book(availability2, user1)
71 bookingsforfoo = Booking.objects.get_by_user(user1)
73 self.assertEqual(len(bookingsforfoo), 2)
74 self.assertTrue(bookingsforfoo[0].availability.when < bookingsforfoo[1].availability.when)
76 def test_booking_get_my_bookings_not_cancelled(self):
77 """ GIVEN 2 bookings for user foo, 1 cancelled; WHEN requesting bookings for user foo; THEN 1 bookings not cancelled should be returned """
78 user1 = aux.createUser("foo", "foo@example.com", "example")
79 availability1 = Availability.objects.get(pk=1)
80 b1 = Booking.objects.book(availability1, user1)
81 availability2 = Availability.objects.get(pk=2)
82 b2 = Booking.objects.book(availability2, user1)
83 b1 = b1.cancel()
84 bookingsforfoo = Booking.objects.get_by_user(user1)
86 self.assertEqual(len(bookingsforfoo), 1)
87 self.assertFalse(bookingsforfoo[0].cancelled)
89 def test_booking_cancel_1(self):
90 """ GIVEN a booking, WHEN it is cancelled; THEN it is marked as cancelled """
91 availability = Availability.objects.get(pk=1)
92 user = aux.createUser("foo", "foo@example.com", "example")
93 booking = Booking.objects.book(availability, user)
94 booking = booking.cancel()
96 self.assertTrue(booking.cancelled)
98 def test_booking_initially_not_cancelled(self):
99 """ GIVEN a booking, WHEN ; THEN it is initially not marked as cancelled """
100 availability = Availability.objects.get(pk=1)
101 user = aux.createUser("foo", "foo@example.com", "example")
102 booking = Booking.objects.book(availability, user)
104 self.assertFalse(booking.cancelled)
106 def test_booking_cancel_2(self):
107 """ GIVEN a booking, WHEN it is cancelled; THEN it's availability is freed """
108 availability = Availability.objects.get(pk=1)
109 user = aux.createUser("foo", "foo@example.com", "example")
110 booking = Booking.objects.book(availability, user)
111 booking = booking.cancel()
113 self.assertFalse(booking.availability.booked)
115 def test_booking_get_by_location_and_date(self):
116 """ GIVEN 2 bookings, 1 for user foo and 1 for user juan; WHEN requesting user bookings for Buenos Aires on the 2th of January 2020; THEN 1 booking with user foo should be returned """
117 availability1 = Availability.objects.get(pk=1)
118 user1 = aux.createUser("foo", "foo@example.com", "example")
119 b1 = Booking.objects.book(availability1, user1)
120 availability2 = Availability.objects.get(pk=2)
121 user2 = aux.createUser("juan", "juan@example.com", "example")
122 b2 = Booking.objects.book(availability2, user2)
123 result = Booking.objects.get_by_location_and_date(availability1.where, datetime(2021,1,2, 0, 0, 0, 0, timezone.utc) )
125 self.assertEqual(len(result), 1)
126 self.assertEqual(result[0].user, user1)
127 self.assertEqual(result[0].availability, availability1)
129 def test_booking_get_by_location_and_date_no_results(self):
130 """ GIVEN 2 bookings, 1 for user foo and 1 for user juan; WHEN requesting user bookings for Buenos Aires on the 10th of January 2020; THEN 1 booking with user foo should be returned """
131 availability1 = Availability.objects.get(pk=1)
132 user1 = aux.createUser("foo", "foo@example.com", "example")
133 b1 = Booking.objects.book(availability1, user1)
134 availability2 = Availability.objects.get(pk=2)
135 user2 = aux.createUser("juan", "juan@example.com", "example")
136 b2 = Booking.objects.book(availability2, user2)
137 result = Booking.objects.get_by_location_and_date(availability1.where, datetime(2021,1,10, 0, 0, 0, 0, timezone.utc) )
139 self.assertEqual(len(result), 0)
141 def test_book_availability_with_notes(self):
142 """ Booking an availability with notes, saves those notes """
143 availability = Availability.objects.get(pk=1)
144 user = aux.createUser("foo", "foo@example.com", "example")
145 note = "Patient: Wilfredo"
146 b = Booking.objects.book(availability, user, note)
147 self.assertEqual(len(Booking.objects.filter(availability=availability)), 1)
148 self.assertEqual(Booking.objects.filter(availability=availability)[0].user, user)
149 self.assertEqual(Booking.objects.filter(availability=availability)[0].note, note)
151 def test_booking_serialize_json_with_note(self):
152 """ GIVEN a booking; WHEN requesting json serialization; THEN it should be returned in json format """
153 availability = Availability.objects.get(pk=1)
154 user = aux.createUser("foo", "foo@example.com", "example")
155 note = "Patient: Wilfredo"
156 booking = Booking.objects.book(availability, user, note)
158 expected_json = {'id': 1, 'availability': availability.json(), 'username': user.username, 'note': note }
160 self.assertEqual(booking.json()["availability"] , expected_json["availability"])
161 self.assertEqual(booking.json()["username"], expected_json["username"])
162 self.assertEqual(booking.json()["note"], expected_json["note"])