def test_booking_get_by_location_and_date_no_results(self):
        """ 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 """
        availability1 = Availability.objects.get(pk=1)
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        b1 = Booking.objects.book(availability1, user1)
        availability2 = Availability.objects.get(pk=2)
        user2 = aux.createUser("juan", "*****@*****.**", "example")
        b2 = Booking.objects.book(availability2, user2)
        result = Booking.objects.get_by_location_and_date(availability1.where, datetime(2021,1,10, 0, 0, 0, 0, timezone.utc) )

        self.assertEqual(len(result), 0)
Exemple #2
0
 def test_view_cancelbooking_only_user_in_booking_allowed(self):
     """ GIVEN a booking for user foo; WHEN POST /policorp/cancelbooking/1 logged in with user zoe; THEN code 401 (unauthorized) should be returned """
     user1 = aux.createUser("foo", "*****@*****.**", "example")
     availability1 = Availability.objects.get(pk=1)
     b1 = Booking.objects.book(availability1, user1)
     user2 = aux.createUser("zoe", "*****@*****.**", "example")
     request = self.factory.post(
         reverse('policorp:cancelbooking', kwargs={'bookingid': 1}))
     request.user = user2
     response = cancelbooking(request, 1)
     self.assertEqual(response.status_code, 401)
    def test_booking_get_my_bookings(self):
        """ 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 """
        availability1 = Availability.objects.get(pk=1)
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        b1 = Booking.objects.book(availability1, user1)
        availability2 = Availability.objects.get(pk=2)
        user2 = aux.createUser("juan", "*****@*****.**", "example")
        b2 = Booking.objects.book(availability2, user2)
        bookingsforfoo = Booking.objects.get_by_user(user1)

        self.assertEqual(len(bookingsforfoo), 1)
        self.assertEqual(bookingsforfoo[0].user, user1)
 def test_get_schedule_sorted_json_2(self):
     l = Location.objects.create_location('Córdoba')
     t = Task.objects.get(pk=2)
     new_availability = Availability.objects.create_availability(
         Availability.objects.get(pk=4).when, l, t)
     availabilities = [
         Availability.objects.get(pk=5),
         Availability.objects.get(pk=6)
     ]
     user = aux.createUser("foo", "*****@*****.**", "example")
     bookings = [Booking.objects.book(Availability.objects.get(pk=4), user)]
     sch = Schedule(date.today(), l, availabilities, bookings)
     expected_json = {
         'date':
         sch.date,
         'location':
         sch.location.json(),
         'schedule': [{
             'booking': bookings[0].json()
         }, {
             'availability': availabilities[0].json()
         }, {
             'availability': availabilities[1].json()
         }]
     }
     self.assertJSONEqual(
         json.dumps(sch.json()),
         json.dumps(expected_json, cls=aux.DateTimeEncoder))
 def test_myschedule_view_return_200(self):
     """*** My Schedule view get request needs to be with response 200, logged in ***"""
     c = Client()
     u = aux.createUser('foo', '*****@*****.**', 'example')
     c.login(username='******', password='******')
     response = c.get(reverse('policorp:myschedule'))
     self.assertEqual(response.status_code, 200)
    def test_booking_initially_not_cancelled(self):
        """ GIVEN a booking, WHEN ; THEN it is initially not marked as cancelled """
        availability = Availability.objects.get(pk=1)
        user = aux.createUser("foo", "*****@*****.**", "example")
        booking = Booking.objects.book(availability, user)

        self.assertFalse(booking.cancelled)
Exemple #7
0
    def test_view_locationschedule_return_full_schedule(self):
        """ GIVEN 3 availabilities for 2021-01-04 at location 2, 1 booked; WHEN requesting schedule for 2021-01-04 at location 2; 1 booking and 2 availabilities should be returned """
        request = self.factory.get(
            reverse('policorp:locationschedule',
                    kwargs={
                        'locationid': 2,
                        'date': '20210104'
                    }))
        user = User.objects.create_supervisor('foo', '*****@*****.**',
                                              'example')
        request.user = user
        location = Location.objects.get(pk=2)
        location.assign_supervisor(user)
        booker4 = aux.createUser('bar', '*****@*****.**', 'example')
        booking4 = Booking.objects.book(Availability.objects.get(pk=4),
                                        booker4)

        expected_data = {
            'date':
            '2021-01-04',
            'location':
            location.json(),
            'schedule': [{
                "booking": Booking.objects.get(id=booking4.id).json()
            }, {
                "availability": Availability.objects.get(pk=5).json()
            }, {
                "availability": Availability.objects.get(pk=6).json()
            }]
        }

        response = locationschedule(request, 2, '20210104')
        logging.debug(str(response.content, encoding='utf8'))
        self.assertJSONEqual(str(response.content, encoding='utf8'),
                             expected_data)
 def test_book_availability_is_booked(self):
     """ Booking an availability marks it as booked """
     availability = Availability.objects.get(pk=1)
     user = aux.createUser("foo", "*****@*****.**", "example")
     b = Booking.objects.book(availability, user)
     availability = Availability.objects.get(pk=1)
     self.assertTrue(availability.booked)
 def test_book_availability_user(self):
     """ Booking an availability registers who boooked it """
     availability = Availability.objects.get(pk=1)
     user = aux.createUser("foo", "*****@*****.**", "example")
     b = Booking.objects.book(availability, user)
     self.assertEqual(Booking.objects.get(pk=1).user, user)
     self.assertEqual(Booking.objects.get(pk=1).availability, availability)
Exemple #10
0
 def test_view_book(self):
     """ GIVEN ; WHEN POST /policorp/book/1 ; THEN code 201 is returned """
     request = self.factory.post(
         reverse('policorp:book', kwargs={'availabilityid': 1}))
     request.user = aux.createUser("foo", "*****@*****.**", "example")
     response = book(request, 1)
     self.assertEqual(response.status_code, 201)
 def test_view_createavailabilities_only_logged_in_supervisor_requests_allowed(
         self):
     """ GIVEN ; WHEN POST /policorp/createavailabilities logged in with non supervisor user; THEN code 401 (unauthorized) should be returned """
     request = self.factory.post(reverse('policorp:createavailabilities'))
     request.user = aux.createUser('foo', '*****@*****.**', 'example')
     response = createavailabilities(request)
     self.assertEqual(response.status_code, 401)
Exemple #12
0
 def test_view_locationschedule_return_1_booking_2(self):
     """ GIVEN 2 booking for 2021-01-02 and 2021-01-03 at location 3; WHEN requesting schedule for 2021-01-02 at location 1; 1 json object is returned """
     request = self.factory.get(
         reverse('policorp:locationschedule',
                 kwargs={
                     'locationid': 3,
                     'date': '20210102'
                 }))
     user = User.objects.create_supervisor('foo', '*****@*****.**',
                                           'example')
     request.user = user
     location = Location.objects.get(pk=3)
     location.assign_supervisor(user)
     booker = aux.createUser('bar', '*****@*****.**', 'example')
     booking3 = Booking.objects.book(Availability.objects.get(pk=3), booker)
     booking2 = Booking.objects.book(Availability.objects.get(pk=2), booker)
     response = locationschedule(request, 3, '20210102')
     expected_data = {
         'date': '2021-01-02',
         'location': location.json(),
         'schedule': [
             {
                 "booking": Booking.objects.get(id=booking3.id).json()
             },
         ]
     }
     self.assertJSONEqual(str(response.content, encoding='utf8'),
                          expected_data)
Exemple #13
0
 def test_view_mysupervisedlocations_only_logged_in_supervisors_requests_allowed(
         self):
     """ GIVEN ; WHEN GET /mysupervisedlocations logged in with a consumer user; THEN code 401 (unauthorized) should be returned """
     request = self.factory.get(reverse('policorp:mysupervisedlocations'))
     request.user = aux.createUser('foo', '*****@*****.**', 'example')
     response = mysupervisedlocations(request)
     self.assertEqual(response.status_code, 401)
Exemple #14
0
 def test_view_locationschedule_return_1_booking_ordered_ascending(self):
     """ GIVEN 3 booking for 2021-01-04 at location 2; WHEN requesting schedule for 2021-01-04 at location 2; 3 json objects are returned in ascending order """
     request = self.factory.get(
         reverse('policorp:locationschedule',
                 kwargs={
                     'locationid': 2,
                     'date': '20210104'
                 }))
     user = User.objects.create_supervisor('foo', '*****@*****.**',
                                           'example')
     request.user = user
     location = Location.objects.get(pk=2)
     location.assign_supervisor(user)
     booker4 = aux.createUser('bar', '*****@*****.**', 'example')
     booker5 = aux.createUser('zoe', '*****@*****.**', 'example')
     booker6 = aux.createUser('kari', '*****@*****.**', 'example')
     booking5 = Booking.objects.book(Availability.objects.get(pk=5),
                                     booker5)
     booking6 = Booking.objects.book(Availability.objects.get(pk=6),
                                     booker6)
     booking4 = Booking.objects.book(Availability.objects.get(pk=4),
                                     booker4)
     response = locationschedule(request, 2, '20210104')
     expected_data = [
         Booking.objects.get(id=booking4.id).json(),
         Booking.objects.get(id=booking5.id).json(),
         Booking.objects.get(id=booking6.id).json()
     ]
     expected_data = {
         'date':
         '2021-01-04',
         'location':
         location.json(),
         'schedule': [
             {
                 "booking": Booking.objects.get(id=booking4.id).json()
             },
             {
                 "booking": Booking.objects.get(id=booking5.id).json()
             },
             {
                 "booking": Booking.objects.get(id=booking6.id).json()
             },
         ]
     }
     self.assertJSONEqual(str(response.content, encoding='utf8'),
                          expected_data)
    def test_booking_cancel(self):
        """ GIVEN a booking, WHEN it is cancelled; THEN it's availability is freed """
        availability = Availability.objects.get(pk=1)
        user = aux.createUser("foo", "*****@*****.**", "example")
        booking = Booking.objects.book(availability, user)
        booking = booking.cancel()

        self.assertFalse(booking.availability.booked)
 def test_book_view_return_201(self):
     """*** Booking an availability with a post request should return 201 ****"""
     c = Client()
     u = aux.createUser('foo', '*****@*****.**', 'example')
     c.login(username='******', password='******')
     response = c.post(
         reverse('policorp:book', kwargs={'availabilityid': 1}))
     self.assertEqual(response.status_code, 201)
    def test_booking_serialize_json(self):
        """ GIVEN a booking; WHEN requesting json serialization; THEN it should be returned in json format """
        availability = Availability.objects.get(pk=1)
        user = aux.createUser("foo", "*****@*****.**", "example")
        booking = Booking.objects.book(availability, user)

        expected_json = {'id': 1, 'availability': availability.json(), 'username': user.username}

        self.assertJSONEqual(json.dumps(booking.json()), json.dumps(expected_json))
 def test_cancelbooking_view_return_201(self):
     """*** Cancelling a booking with a post request should return 201 ****"""
     user1 = aux.createUser('foo', '*****@*****.**', 'example')
     availability1 = Availability.objects.get(pk=1)
     b1 = Booking.objects.book(availability1, user1)
     c = Client()
     c.login(username='******', password='******')
     response = c.post(
         reverse('policorp:cancelbooking', kwargs={'bookingid': 1}))
     self.assertEqual(response.status_code, 201)
Exemple #19
0
 def test_view_cancelbooking(self):
     """ GIVEN a booking for user foo; WHEN POST /policorp/cancelbooking/1 ; THEN code 201 is returned """
     user1 = aux.createUser("foo", "*****@*****.**", "example")
     availability1 = Availability.objects.get(pk=1)
     b1 = Booking.objects.book(availability1, user1)
     request = self.factory.post(
         reverse('policorp:cancelbooking', kwargs={'bookingid': 1}))
     request.user = user1
     response = cancelbooking(request, 1)
     self.assertEqual(response.status_code, 201)
Exemple #20
0
    def test_view_book_returns_booking_json(self):
        """ GIVEN ; WHEN POST /policorp/book/1 ; THEN code 201 is returned """
        request = self.factory.post(
            reverse('policorp:book', kwargs={'availabilityid': 1}))
        request.user = aux.createUser("foo", "*****@*****.**", "example")
        response = book(request, 1)

        expected_json = Booking.objects.get(pk=1).json()
        self.assertJSONEqual(str(response.content, encoding='utf8'),
                             expected_json)
    def test_booking_get_my_bookings_ordered_2(self):
        """ GIVEN 2 bookings for user foo; WHEN requesting bookings for user foo; THEN 2 bookings should be returned ordered by ascending availability date """
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        availability1 = Availability.objects.get(pk=1)
        b1 = Booking.objects.book(availability1, user1)
        availability2 = Availability.objects.get(pk=2)
        b2 = Booking.objects.book(availability2, user1)
        bookingsforfoo = Booking.objects.get_by_user(user1)

        self.assertEqual(len(bookingsforfoo), 2)
        self.assertTrue(bookingsforfoo[0].availability.when < bookingsforfoo[1].availability.when)
Exemple #22
0
 def test_view_locationschedule_only_logged_in_rolepervisor_requests_allowed(
         self):
     """ GIVEN ; WHEN GET /locationschedule/1/20210102 logged in with a non supervisor user; THEN code 401 (unauthorized) should be returned """
     request = self.factory.get(
         reverse('policorp:locationschedule',
                 kwargs={
                     'locationid': 1,
                     'date': '20210102'
                 }))
     request.user = aux.createUser('foo', '*****@*****.**', 'example')
     response = locationschedule(request, 1, '20210102')
     self.assertEqual(response.status_code, 401)
    def test_booking_get_my_bookings_not_cancelled(self):
        """ GIVEN 2 bookings for user foo, 1 cancelled; WHEN requesting bookings for user foo; THEN 1 bookings not cancelled should be returned """
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        availability1 = Availability.objects.get(pk=1)
        b1 = Booking.objects.book(availability1, user1)
        availability2 = Availability.objects.get(pk=2)
        b2 = Booking.objects.book(availability2, user1)
        b1 = b1.cancel()
        bookingsforfoo = Booking.objects.get_by_user(user1)

        self.assertEqual(len(bookingsforfoo), 1)
        self.assertFalse(bookingsforfoo[0].cancelled)
Exemple #24
0
    def test_view_cancelbooking_returns_cancelled_booking(self):
        """ GIVEN a booking for user foo; WHEN POST /cancelbooking with user foo; THEN json with 2 bookings should be returned"""
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        availability1 = Availability.objects.get(pk=1)
        b1 = Booking.objects.book(availability1, user1)

        request = self.factory.post(
            reverse('policorp:cancelbooking', kwargs={'bookingid': 1}))
        request.user = user1
        response = cancelbooking(request, 1)

        expected_json = Booking.objects.get(pk=1).json()
        self.assertJSONEqual(str(response.content, encoding='utf8'),
                             expected_json)
Exemple #25
0
    def test_view_myschedule_returns_caller_bookings(self):
        """ GIVEN 2 bookings for user foo; WHEN GET /myschedule with user foo; THEN json with 2 bookings should be returned"""
        user1 = aux.createUser("foo", "*****@*****.**", "example")
        availability1 = Availability.objects.get(pk=1)
        b1 = Booking.objects.book(availability1, user1)
        availability2 = Availability.objects.get(pk=2)
        b2 = Booking.objects.book(availability2, user1)
        request = self.factory.get(reverse('policorp:myschedule'))
        request.user = user1
        response = myschedule(request)

        expected_json = [b1.json(), b2.json()]
        self.assertJSONEqual(str(response.content, encoding='utf8'),
                             expected_json)
    def test_get_schedule_sorted_array_1(self):
        """ GIVEN a schedule; WHEN it is requested; THEN it is a sorted ascending array by date """

        l = Location.objects.create_location('Córdoba')
        availabilities = [
            Availability.objects.get(pk=4),
            Availability.objects.get(pk=6)
        ]
        bookings = [
            Booking.objects.book(
                Availability.objects.get(pk=5),
                aux.createUser("foo", "*****@*****.**", "example"))
        ]
        sch = Schedule(date.today(), l, availabilities, bookings)
        expected_array = [availabilities[0], bookings[0], availabilities[1]]
        self.assertEqual(sch.toSortedScheduleArray(), expected_array)
    def test_create_schedule_date_and_location_and_availabilities_and_bookings(
            self):
        """ A schedule should contain a date, a location, an array of availabilities and an array of bookings """

        l = Location.objects.create_location('Córdoba')
        availabilities = [
            Availability.objects.get(pk=4),
            Availability.objects.get(pk=6)
        ]
        bookings = [
            Booking.objects.book(
                Availability.objects.get(pk=5),
                aux.createUser("foo", "*****@*****.**", "example"))
        ]
        sch = Schedule(date.today(), l, availabilities, bookings)
        self.assertEqual(sch.date, date.today())
        self.assertEqual(sch.location, l)
        self.assertEqual(sch.availabilities, availabilities)
        self.assertEqual(sch.bookings, bookings)
    def test_get_schedule_sorted_array_two_equal_bookings(self):
        """ GIVEN a schedule; WHEN it is requested; THEN it is a sorted ascending array by date """

        l = Location.objects.create_location('Córdoba')
        t = Task.objects.get(pk=2)
        new_availability = Availability.objects.create_availability(
            Availability.objects.get(pk=4).when, l, t)
        availabilities = [
            Availability.objects.get(pk=6),
            Availability.objects.get(pk=5)
        ]
        user = aux.createUser("foo", "*****@*****.**", "example")
        bookings = [
            Booking.objects.book(Availability.objects.get(pk=4), user),
            Booking.objects.book(new_availability, user),
        ]
        sch = Schedule(date.today(), l, availabilities, bookings)
        expected_array = [
            bookings[0], bookings[1], availabilities[1], availabilities[0]
        ]
        self.assertEqual(sch.toSortedScheduleArray(), expected_array)
Exemple #29
0
 def test_view_myschedule_returns_200(self):
     """ GIVEN ; WHEN GET /myschedule ; THEN code 200 is returned """
     request = self.factory.get(reverse('policorp:myschedule'))
     request.user = aux.createUser('foo', '*****@*****.**', 'example')
     response = myschedule(request)
     self.assertEqual(response.status_code, 200)
 def test_location_supervisor_user_is_not_supervisor_error(self):
     """ GIVEN 1 location; WHEN assigning a consumer user; THEN a ValidationError is raised """
     l1 = Location.objects.get(pk=1)
     u = aux.createUser("foo", "*****@*****.**", "example")
     with self.assertRaises(ValidationError):
         l1.assign_supervisor(u)