class ActivityInstanceView(View): def __init__(self): self.activity_instance_manager = ActivityInstanceManager() def get(self, request, activity_instance_id): activity_instance = self.activity_instance_manager.retrieve_activity_instance(activity_instance_id) if activity_instance is None: raise Http404 else: activity_instance = convert_activity_instance_timestamp_to_iso(activity_instance) return HttpResponse(util.obj_to_json(activity_instance), content_type='application/json') def put(self, request, activity_instance_id): attributes_dictionary = ast.literal_eval(request.read().decode('utf-8')) if attributes_dictionary.get('start_time') is not None: attributes_dictionary['start_time'] = util.iso8601_to_utc_timestamp(attributes_dictionary['start_time']) if attributes_dictionary.get('end_time') is not None: attributes_dictionary['end_time'] = util.iso8601_to_utc_timestamp(attributes_dictionary['end_time']) activity_instance = self.activity_instance_manager.update_activity_instance(activity_instance_id, **attributes_dictionary) if activity_instance is None: raise Http404 else: activity_instance = convert_activity_instance_timestamp_to_iso(activity_instance) return HttpResponse(util.obj_to_json(activity_instance), content_type='application/json') def post(self, request, activity_instance_id=None): activity_id = request.POST.get('activity_id') start_time = util.iso8601_to_utc_timestamp(request.POST.get('start_time')) end_time = util.iso8601_to_utc_timestamp(request.POST.get('end_time')) price = float(request.POST.get('price')) capacity = int(request.POST.get('capacity')) bookings = request.POST.get('bookings') if bookings is None: activity_instance = self.activity_instance_manager.create_activity_instance(activity_id=activity_id, start_time=start_time, end_time=end_time, price=price, capacity=capacity) else: activity_instance = self.activity_instance_manager.create_activity_instance(activity_id=activity_id, start_time=start_time, end_time=end_time, price=price, capacity=capacity, bookings=int(bookings)) activity_instance = convert_activity_instance_timestamp_to_iso(activity_instance) return HttpResponse(util.obj_to_json(activity_instance), content_type='application/json') def delete(self, request, activity_instance_id): if self.activity_instance_manager.delete_activity_instance(activity_instance_id): return HttpResponse() else: raise Http404
def test_activity_instance_update(self): scheduling_manager = ActivityInstanceManager() vendor1 = create_vendor('vendor1') activity1 = create_activity('activity1', vendor1) activity_instance1 = ActivityInstance(activity=activity1, start_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Hongkong')).replace(hour=14, month=7).isoformat('T')), end_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Hongkong')).replace(hour=15, month=7).isoformat('T')), price=12.12, capacity=10, bookings=0) activity_instance1.save() activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, start_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Asia/Kolkata')).replace(hour=1).isoformat('T'))) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.start_time, retrieved_instance1.start_time) activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, end_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Greenwich')).replace(hour=14).isoformat('T'))) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.end_time, retrieved_instance1.end_time) activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, price=15.23) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.price, float(retrieved_instance1.price)) activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, capacity=20) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.capacity, retrieved_instance1.capacity) activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, bookings=10) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.bookings, retrieved_instance1.bookings) activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, bookings=15, capacity=25, start_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Iran')).replace(hour=2, month=9).isoformat('T')), end_time=util.iso8601_to_utc_timestamp(datetime.now(tz=pytz.timezone('Turkey')).replace(hour=4, month=9).isoformat('T')), price=300) retrieved_instance1 = ActivityInstance.objects.get(activity_instance_id=activity_instance1.activity_instance_id) self.assertEqual(activity_instance1.bookings, retrieved_instance1.bookings) self.assertEqual(activity_instance1.capacity, retrieved_instance1.capacity) self.assertEqual(activity_instance1.start_time, retrieved_instance1.start_time) self.assertEqual(activity_instance1.end_time, retrieved_instance1.end_time) self.assertEqual(activity_instance1.price, float(retrieved_instance1.price)) with self.assertRaises(BookingsCountInvalidException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, bookings=30) with self.assertRaises(BookingsCountInvalidException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, capacity=100, bookings=500) with self.assertRaises(BookingsCountInvalidException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, bookings=1100, capacity=200) try: activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, bookings=1, capacity=1) except BookingsCountInvalidException: self.fail("Equal capacity and bookings value raised exception.") with self.assertRaises(InvalidCapacityException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, capacity=0) with self.assertRaises(InvalidCapacityException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, capacity=0, bookings=12) with self.assertRaises(InvalidCapacityException): activity_instance1 = scheduling_manager.update_activity_instance(activity_instance1.activity_instance_id, capacity=-1)