Source code for apps.api.tests.test_reservations

from rest_framework.test import APITestCase
from rest_framework import status
from datetime import datetime, timedelta

from apps.core.models.area import Area
from apps.core.models.reservation import Reservation


[docs]class ReservationTestCase(APITestCase):
[docs] @classmethod def setUpClass(cls): cls.area = Area.objects.create(office_name='test_office_name') cls.area2 = Area.objects.create(office_name='2test_office_name')
# POST on /reservations
[docs] def test_post_valid_reservation(self): data = { 'area': self.area.id, 'time_from': datetime.now(), 'time_to': datetime.now()+timedelta(hours=1) } response = self.client.post(f"/api/reservations", data=data, fromat='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data['area'], self.area.id)
[docs] def test_post_invalid_area_id_id_reservation(self): data = { 'area': 'some_invalid_id', 'time_from': datetime.now(), 'time_to': datetime.now() + timedelta(hours=1) } response = self.client.post(f"/api/reservations", data=data, fromat='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
[docs] def test_post_overlapping_reservation(self): time_to = datetime.now() time_from = time_to - timedelta(hours=1) reservation1 = Reservation.objects.create(area_id=self.area.id, time_from=time_from, time_to=time_to) data = { 'area': self.area.id, 'time_from': time_from + timedelta(minutes=30), 'time_to': time_to + timedelta(minutes=30) } response = self.client.post(f"/api/reservations", data=data, fromat='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data, 'You can not post an overlapping reservation for same area')
[docs] def test_post_two_valid_reservation_for_same_area(self): time_to = datetime.now() time_from = time_to - timedelta(hours=1) reservation1 = Reservation.objects.create(area_id=self.area.id, time_from=time_from, time_to=time_to) data = { 'area': self.area.id, 'time_from': time_to + timedelta(minutes=10), 'time_to': time_to + timedelta(minutes=70) } response = self.client.post(f"/api/reservations", data=data, fromat='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED)
#@APITestCase.skip("Problem with put method (get reservation)") # PUT on /reservation/{reservation_id}
[docs] def test_put_valid_reservation(self): time_from = datetime.now() - timedelta(hours=1) time_to = time_from + timedelta(hours=1) reservation = Reservation.objects.create(area_id=self.area2.id, time_from=time_from, time_to=time_to) data = { 'area': self.area.id, 'time_from': datetime.now(), 'time_to': datetime.now() + timedelta(hours=1) } response = self.client.put(f"/api/reservations/{reservation.id}", data=data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['area'], self.area.id)
[docs] def test_put_invalid_reservation(self): time_from = datetime.now() - timedelta(hours=1) time_to = time_from + timedelta(hours=1) reservation = Reservation.objects.create(area_id=self.area2.id, time_from=time_from, time_to=time_to) data = { 'area': 'invalid_id', 'time_from': datetime.now(), 'time_to': datetime.now() + timedelta(hours=1) } response = self.client.put(f"/api/reservations/{reservation.id}", data=data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
# Delete on /reservation/{reservation_id}
[docs] def test_delete_reservation(self): reservation = Reservation.objects.create(area_id=self.area2.id, time_from=datetime.now() - timedelta(hours=1), time_to=datetime.now()) response = self.client.delete(f"/api/reservations/{reservation.id}") self.assertEqual(response.status_code, status.HTTP_200_OK)
[docs] def test_delete_non_existing_reservation(self): invalid_id = 'invalid_id' response = self.client.delete(f"/api/reservations/{invalid_id}") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
[docs] def test_delete_already_deleted_reservation(self): reservation = Reservation.objects.create(area_id=self.area2.id, time_from=datetime.now() - timedelta(hours=1), time_to=datetime.now()) reservation.soft_delete() response = self.client.delete(f"/api/reservations/{reservation.id}") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
# Get on /reservation/{area_id}
[docs] def test_get_all_reservations_for_area(self): time_from = datetime.now() - timedelta(hours=1) time_to = datetime.now() reservation = Reservation.objects.create(area_id=self.area2.id, time_from=time_from, time_to=time_to) reservation2 = Reservation.objects.create(area_id=self.area2.id, time_from=time_to + timedelta(hours=1), time_to=time_to + timedelta(hours=2)) response = self.client.get(f"/api/reservations/{self.area2.id}") self.assertEqual(response.status_code, status.HTTP_200_OK) for reserv in response.data: self.assertEqual(reserv['area'], self.area2.id)
[docs] def test_get_reservations_for_non_existing_area(self): time_from = datetime.now() - timedelta(hours=1) time_to = datetime.now() reservation = Reservation.objects.create(area_id=self.area2.id, time_from=time_from, time_to=time_to) reservation2 = Reservation.objects.create(area_id=self.area2.id, time_from=time_to + timedelta(hours=1), time_to=time_to + timedelta(hours=2)) response = self.client.get(f"/api/reservations/{self.area.id}") self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, [])
[docs] @classmethod def tearDownClass(cls): cls.area.delete() cls.area2.delete()