# 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"]);