Hide keyboard shortcuts

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 

7 

8class TestBookingSerializer(TestCase): 

9 

10 fixtures = ['testsdata.json'] 

11 

12 def test_bookingSerializer_serialize(self): 

13 

14 # User 

15 username = "foo" 

16 email = "foo@example.com" 

17 password = "example" 

18 user = aux.createUser("foo", "foo@example.com", "example") 

19 

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) 

28 

29 # Booking 

30 b = Booking.objects.book(a1, user) 

31 serializer = BookingSerializer(instance=b) 

32 data = serializer.data 

33 

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) 

39 

40 def test_bookingSerializer_deserialize_is_valid(self): 

41 

42 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example') 

43 

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 } 

59 

60 serializer = BookingSerializer(data=booking) 

61 self.assertTrue(serializer.is_valid()) 

62 

63 def test_bookingSerializer_deserialize_with_blank_note_is_valid(self): 

64 

65 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example') 

66 

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 } 

82 

83 serializer = BookingSerializer(data=booking) 

84 self.assertTrue(serializer.is_valid(raise_exception=True)) 

85 

86 def test_bookingSerializer_deserialize_without_cancelled_field_is_valid_and_defaults_to_false(self): 

87 

88 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example') 

89 

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 } 

104 

105 serializer = BookingSerializer(data=booking) 

106 self.assertTrue(serializer.is_valid(raise_exception=True)) 

107 bookingObj = serializer.save() 

108 self.assertEqual(bookingObj.cancelled, cancelled) 

109 

110 def test_bookingSerializer_deserialize_includes_all_fields(self): 

111 

112 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example') 

113 

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 } 

129 

130 serializer = BookingSerializer(data=booking) 

131 

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) 

139 

140 def test_bookingSerializer_save_booking_after_deserialize(self): 

141 

142 u1 = User.objects.create_supervisor('foo', 'foo@example.com', 'example') 

143 

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 } 

159 

160 serializer = BookingSerializer(data=booking) 

161 

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)