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 datetime import datetime, timezone, time, timedelta
2from django.test import TestCase
3import json
4from policorp.models import User, Location, Booking, Task, Availability
5from policorp.tests import aux
6from policorp.serializers import BookingSerializer, AvailabilitySerializer, UserSerializer
8class TestBookingSerializer(TestCase):
10 fixtures = ['testsdata.json']
12 def test_bookingSerializer_serialize(self):
14 # User
15 username = "foo"
16 email = "foo@example.com"
17 password = "example"
18 user = aux.createUser("foo", "foo@example.com", "example")
20 # Availability
21 now = datetime.now(timezone.utc)
22 tomorrow = now + timedelta(days = 1)
23 loc_name = "Buenos Aires"
24 l1 = Location.objects.create_location(loc_name)
25 task_name = "Device Installation"
26 t1 = Task.objects.create_task(task_name, 30)
27 a1 = Availability.objects.create_availability(tomorrow, l1, t1)
29 # Booking
30 b = Booking.objects.book(a1, user)
31 serializer = BookingSerializer(instance=b)
32 data = serializer.data
34 self.assertEqual(set(data.keys()), set(['id', 'availability', 'user', 'cancelled', 'note']))
35 self.assertEqual(data['cancelled'], False)
36 self.assertEqual(data['note'], '')
37 self.assertEqual(data['availability'], AvailabilitySerializer(instance = a1).data)
38 self.assertEqual(data['user'], UserSerializer(instance = user).data)
40 def test_bookingSerializer_deserialize_is_valid(self):
42 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
44 now = datetime.now(tz=timezone.utc)
45 locationid = 1
46 taskid = 1
47 cancelled = False
48 note = 'A note for my schedule'
49 booking = {
50 'availability': {
51 'when': now.isoformat(),
52 'where': locationid,
53 'what': taskid
54 },
55 'cancelled': cancelled,
56 'note': note,
57 'user': u1.username
58 }
60 serializer = BookingSerializer(data=booking)
61 self.assertTrue(serializer.is_valid())
63 def test_bookingSerializer_deserialize_with_blank_note_is_valid(self):
65 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
67 now = datetime.now(tz=timezone.utc)
68 locationid = 1
69 taskid = 1
70 cancelled = False
71 note = ''
72 booking = {
73 'availability': {
74 'when': now.isoformat(),
75 'where': locationid,
76 'what': taskid
77 },
78 'cancelled': cancelled,
79 'note': note,
80 'user': u1.username
81 }
83 serializer = BookingSerializer(data=booking)
84 self.assertTrue(serializer.is_valid(raise_exception=True))
86 def test_bookingSerializer_deserialize_without_cancelled_field_is_valid_and_defaults_to_false(self):
88 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
90 now = datetime.now(tz=timezone.utc)
91 locationid = 1
92 taskid = 1
93 cancelled = False
94 note = ''
95 booking = {
96 'availability': {
97 'when': now.isoformat(),
98 'where': locationid,
99 'what': taskid
100 },
101 'note': note,
102 'user': u1.username
103 }
105 serializer = BookingSerializer(data=booking)
106 self.assertTrue(serializer.is_valid(raise_exception=True))
107 bookingObj = serializer.save()
108 self.assertEqual(bookingObj.cancelled, cancelled)
110 def test_bookingSerializer_deserialize_includes_all_fields(self):
112 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
114 now = datetime.now(tz=timezone.utc)
115 locationid = 1
116 taskid = 1
117 cancelled = False
118 note = 'A note for my schedule'
119 booking = {
120 'availability': {
121 'when': now.isoformat(),
122 'where': locationid,
123 'what': taskid
124 },
125 'user': u1.username,
126 'cancelled': cancelled,
127 'note': note
128 }
130 serializer = BookingSerializer(data=booking)
132 if (serializer.is_valid(raise_exception=True)):
133 self.assertEqual(serializer.data.get('cancelled'), cancelled)
134 self.assertEqual(serializer.data.get('note'), note)
135 self.assertEqual(serializer.data.get('user').get('username'), u1.username)
136 self.assertEqual(serializer.data.get('availability').get('when'), now.isoformat())
137 self.assertEqual(serializer.data.get('availability').get('what').get('id'), taskid)
138 self.assertEqual(serializer.data.get('availability').get('where').get('id'), locationid)
140 def test_bookingSerializer_save_booking_after_deserialize(self):
142 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example')
144 now = datetime.now(tz=timezone.utc)
145 locationid = 1
146 taskid = 1
147 cancelled = False
148 note = 'A note for my schedule'
149 booking = {
150 'availability': {
151 'when': now.isoformat(),
152 'where': locationid,
153 'what': taskid
154 },
155 'user': u1.username,
156 'cancelled': cancelled,
157 'note': note
158 }
160 serializer = BookingSerializer(data=booking)
162 if (serializer.is_valid(raise_exception=True)):
163 bookingObj = serializer.save()
164 self.assertEqual(bookingObj, Booking.objects.get(pk=bookingObj.id))
165 self.assertEqual(bookingObj.availability.when, now)
166 self.assertEqual(bookingObj.availability.what.id, taskid)
167 self.assertEqual(bookingObj.availability.where.id, locationid)
168 self.assertEqual(bookingObj.user, u1)
169 self.assertEqual(bookingObj.cancelled, cancelled)
170 self.assertEqual(bookingObj.note, note)