Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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)