-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_api_subject.py 9.45 KiB
# coding=utf-8
import json
from django.contrib.auth.models import User
from django.test import Client
from django.test import TestCase
from django.urls import reverse
from web.tests.functions import create_subject, create_worker, create_appointment_type, create_location, \
create_get_suffix
from web.views.subject import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT
from web.api_views.subject import get_subjects_order, get_subjects_filtered, serialize_subject
from web.models import Subject
class TestApi(TestCase):
def setUp(self):
self.subject = create_subject()
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)
self.client.login(username=username, password=password)
def test_cities(self):
city_name = "some city"
response = self.client.get(reverse('web.api.cities'))
self.assertEqual(response.status_code, 200)
cities = json.loads(response.content)['cities']
self.assertFalse(city_name in cities)
self.subject.city = city_name
self.subject.save()
response = self.client.get(reverse('web.api.cities'))
cities = json.loads(response.content)['cities']
self.assertTrue(city_name in cities)
def test_countries(self):
country_name = "some country"
response = self.client.get(reverse('web.api.countries'))
self.assertEqual(response.status_code, 200)
countries = json.loads(response.content)['countries']
self.assertFalse(country_name in countries)
self.subject.country = country_name
self.subject.save()
response = self.client.get(reverse('web.api.countries'))
countries = json.loads(response.content)['countries']
self.assertTrue(country_name in countries)
def test_referrals(self):
referral_name = "some referral"
response = self.client.get(reverse('web.api.referrals'))
self.assertEqual(response.status_code, 200)
referrals = json.loads(response.content)['referrals']
self.assertFalse(referral_name in referrals)
self.subject.referral = referral_name
self.subject.save()
response = self.client.get(reverse('web.api.referrals'))
referrals = json.loads(response.content)['referrals']
self.assertTrue(referral_name in referrals)
def test_subjects_general(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC}))
self.assertEqual(response.status_code, 200)
def test_subjects_no_visit(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_NO_VISIT}))
self.assertEqual(response.status_code, 200)
def test_subjects_require_contact(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_REQUIRE_CONTACT}))
self.assertEqual(response.status_code, 200)
def test_subjects_invalid(self):
response = self.client.get(reverse('web.api.subjects', kwargs={'type': "bla"}))
self.assertEqual(response.status_code, 500)
def test_subjects_general_search(self):
name = "Piotrek"
self.subject.first_name = name
self.subject.save()
params = {
"columns[0][search][value]": "another_name",
"columns[0][data]": "first_name"
}
url = ("%s" + create_get_suffix(params)) % reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertFalse(name in response.content)
params["columns[0][search][value]"] = name
url = ("%s" + create_get_suffix(params)) % reverse('web.api.subjects', kwargs={'type': SUBJECT_LIST_GENERIC})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertTrue(name in response.content)
def check_subject_filtered(self, filters, result):
subjects = get_subjects_filtered(Subject.objects.all(), filters)
self.assertEqual(len(result), subjects.count())
for index in range(len(result)):
self.assertEqual(result[index], subjects[index])
def check_subject_ordered(self, order, result):
subjects = get_subjects_order(Subject.objects.all(), order, "asc")
self.assertEqual(len(result), subjects.count())
for index in range(len(result)):
self.assertEqual(result[index], subjects[index])
subjects = get_subjects_order(Subject.objects.all(), order, "desc")
length = len(result)
self.assertEqual(length, subjects.count())
for index in range(length):
self.assertEqual(result[length - index - 1], subjects[index])
def test_subjects_sort_nd_number(self):
subject = self.subject
subject.nd_number = "PPP"
subject.save()
subject2 = create_subject(2)
subject2.nd_number = "QQQ"
subject2.save()
self.check_subject_ordered("nd_number", [subject, subject2])
def test_subjects_sort_default_location(self):
subject = self.subject
self.check_subject_ordered("default_location", [subject])
def test_subjects_sort_screening_number(self):
subject = self.subject
subject.screening_number = "PPP"
subject.save()
subject2 = create_subject(2)
subject2.screening_number = "QQQ"
subject2.save()
self.check_subject_ordered("screening_number", [subject, subject2])
def test_subjects_sort_last_name(self):
subject = self.subject
subject.last_name = "XXX"
subject.save()
subject2 = create_subject(2)
subject2.last_name = "YYY"
subject2.save()
self.check_subject_ordered("last_name", [subject, subject2])
def test_subjects_sort_dead(self):
subject = self.subject
subject.dead = True
subject.save()
subject2 = create_subject(2)
subject2.dead = False
subject2.save()
self.check_subject_ordered("dead", [subject2, subject])
def test_subjects_sort_resigned(self):
subject = self.subject
subject.resigned = True
subject.save()
subject2 = create_subject(2)
subject2.resigned = False
subject2.save()
self.check_subject_ordered("resigned", [subject2, subject])
def test_subjects_sort_postponed(self):
subject = self.subject
subject.postponed = True
subject.save()
subject2 = create_subject(2)
subject2.postponed = False
subject2.save()
self.check_subject_ordered("postponed", [subject2, subject])
def test_subjects_filter_dead(self):
subject = self.subject
subject.dead = True
subject.save()
subject2 = create_subject(2)
subject2.dead = False
subject2.save()
self.check_subject_filtered([["dead", "true"]], [subject])
self.check_subject_filtered([["dead", "false"]], [subject2])
def test_subjects_filter_nd_number(self):
subject = self.subject
subject.nd_number = "PPP"
subject.save()
subject2 = create_subject(2)
subject2.nd_number = "QQQ"
subject2.save()
self.check_subject_filtered([["nd_number", "P"]], [subject])
def test_subjects_filter_screening_number(self):
subject = self.subject
subject.screening_number = "PPP"
subject.save()
subject2 = create_subject(2)
subject2.screening_number = "QQQ"
subject2.save()
self.check_subject_filtered([["screening_number", "Q"]], [subject2])
def test_subjects_filter_last_name(self):
subject = self.subject
subject.last_name = "XXX"
subject.save()
subject2 = create_subject(2)
subject2.last_name = "YYY"
subject2.save()
self.check_subject_filtered([["last_name", "Q"]], [])
def test_subjects_filter_resigned(self):
subject = self.subject
subject.resigned = True
subject.save()
subject2 = create_subject(2)
subject2.resigned = False
subject2.save()
self.check_subject_filtered([["resigned", "true"]], [subject])
self.check_subject_filtered([["resigned", "false"]], [subject2])
def test_subjects_filter_postponed(self):
subject = self.subject
subject.postponed = True
subject.save()
subject2 = create_subject(2)
subject2.postponed = False
subject2.save()
self.check_subject_filtered([["postponed", "true"]], [subject])
self.check_subject_filtered([["postponed", "false"]], [subject2])
def test_subjects_filter_default_location(self):
subject = self.subject
self.check_subject_filtered([["default_location", str(subject.default_location.id)]], [subject])
self.check_subject_filtered([["default_location", "-1"]], [])
def test_subjects_filter_unknown(self):
subject = self.subject
self.check_subject_filtered([["some_unknown", "zxczxc"]], [subject])
self.check_subject_filtered([["", ""]], [subject])
def test_serialize_subject(self):
subject = self.subject
subject.dead = True
subject_json = serialize_subject(subject);
self.assertEqual("YES", subject_json["dead"]);