-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_daily_planning.py 9.05 KiB
# coding=utf-8
import datetime
import json
from django.contrib.auth.models import User
from django.test import Client, RequestFactory
from django.test import TestCase
from django.urls import reverse
from web.api_views.daily_planning import get_workers_for_daily_planning
from web.models import Worker, Availability, Holiday, AppointmentTypeLink
from web.models.constants import TUESDAY_AS_DAY_OF_WEEK
from web.tests.functions import create_worker, create_subject, create_appointment, create_flying_team, create_visit, \
create_appointment_type, get_test_location
class TestApi(TestCase):
def setUp(self):
self.client = Client()
username = 'piotr'
password = 'top_secret'
self.user = User.objects.create_user(
username=username, email='jacob@bla', password=password)
self.worker = create_worker(self.user, True)
self.worker.role = Worker.ROLE_CHOICES_DOCTOR
self.worker.save()
self.client.login(username=username, password=password)
def test_empty_availabilities(self):
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(0, len(availabilities))
def test_events_with_appointments(self):
flying_team = create_flying_team()
flying_team.place = "UTF name: ät"
flying_team.save()
subject = create_subject()
visit = create_visit(subject)
appointment = create_appointment(visit)
appointment.datetime_when = datetime.datetime.now().replace(year=2017, month=9, day=5,
hour=12)
appointment.length = 30
appointment.location = self.worker.locations.all()[0]
appointment.flying_team = flying_team
appointment.save()
AppointmentTypeLink.objects.create(appointment=appointment, appointment_type=create_appointment_type())
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
content = json.loads(response.content)
self.assertEqual(0, len(content['availabilities']))
self.assertEqual(1, len(content['data'][0]['events']))
def test_nonempty_availabilities(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(1, len(availabilities))
def test_nonempty_availabilities_with_non_overlapping_holidays(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
holiday = Holiday.objects.create(person=self.worker,
datetime_start=datetime.datetime.now().replace(day=1, hour=5),
datetime_end=datetime.datetime.now().replace(day=2, hour=20)
)
holiday.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(1, len(availabilities))
def test_empty_availabilities_due_to_holidays(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
holiday = Holiday.objects.create(person=self.worker,
datetime_start=datetime.datetime.now().replace(year=2017, month=9, day=5,
hour=5),
datetime_end=datetime.datetime.now().replace(year=2017, month=9, day=5,
hour=20)
)
holiday.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(0, len(availabilities))
def test_empty_availabilities_due_to_holidays_2(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
holiday = Holiday.objects.create(person=self.worker,
datetime_start=datetime.datetime.now().replace(year=2017, month=9, day=1,
hour=12),
datetime_end=datetime.datetime.now().replace(year=2017, month=9, day=17,
hour=12)
)
holiday.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(0, len(availabilities))
def test_nonempty_availabilities_with_overlapping_holidays(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
holiday = Holiday.objects.create(person=self.worker,
datetime_start=datetime.datetime.now().replace(year=2017, month=9, day=6,
hour=12),
datetime_end=datetime.datetime.now().replace(year=2017, month=9, day=6,
hour=20)
)
holiday.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(1, len(availabilities))
def test_nonempty_availabilities_with_included_holidays(self):
availability = Availability.objects.create(person=self.worker, day_number=TUESDAY_AS_DAY_OF_WEEK,
available_from="8:00", available_till="16:00")
availability.save()
holiday = Holiday.objects.create(person=self.worker,
datetime_start=datetime.datetime.now().replace(year=2017, month=9, day=5,
hour=12),
datetime_end=datetime.datetime.now().replace(year=2017, month=9, day=5,
hour=13)
)
holiday.save()
response = self.client.get(reverse('web.api.events', kwargs={'date': "2017-09-05"}))
self.assertEqual(response.status_code, 200)
availabilities = json.loads(response.content)['availabilities']
self.assertEqual(2, len(availabilities))
def test_get_workers_for_daily_planning(self):
factory = RequestFactory()
request = factory.get('/api/workers')
request.user = self.user
user = User.objects.create_user(username="a", email='jacob@bla', password="b")
invalid_worker = create_worker(user)
invalid_worker.locations = [get_test_location()]
invalid_worker.save()
invalid_worker.disable()
workers = get_workers_for_daily_planning(request)
self.assertFalse(invalid_worker in workers)
def test_get_workers_for_daily_planning_2(self):
factory = RequestFactory()
request = factory.get('/api/workers')
request.user = self.user
invalid_worker = create_worker()
invalid_worker.locations = [get_test_location()]
invalid_worker.save()
invalid_worker.disable()
workers = get_workers_for_daily_planning(request)
self.assertFalse(invalid_worker in workers)