From 0391bb43854588b6b13b7e6a790027d1122990df Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Sun, 19 Sep 2021 00:45:23 +0200 Subject: [PATCH] =?UTF-8?q?Test=20Autocomplete=20=C5=A0kol?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 2 +- seminar/test_skola_autocomplete.py | 64 ++++++++++++++++++++++++++++++ seminar/utils.py | 10 +++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 seminar/test_skola_autocomplete.py diff --git a/requirements.txt b/requirements.txt index 3786d5a5..abd4f584 100644 --- a/requirements.txt +++ b/requirements.txt @@ -51,7 +51,7 @@ Werkzeug==0.14.1 # django-allauth # oauthlib # python-openid -# requests +requests # requests-oauthlib # uWSGI diff --git a/seminar/test_skola_autocomplete.py b/seminar/test_skola_autocomplete.py new file mode 100644 index 00000000..91e5a82b --- /dev/null +++ b/seminar/test_skola_autocomplete.py @@ -0,0 +1,64 @@ +from django.test import TestCase +from django.urls import reverse +import seminar.models as m +import seminar.views as v +from seminar.utils import sync_skoly + +class OrgSkolyAutocompleteTestCase(TestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + sync_skoly('https://mam.mff.cuni.cz/') + # Správné školy podle toho, co orgové poslali: (prefix, ID školy) + # NOTE: Pozor, jedná se o databázové indexy. Pokud se to někdy rozbije, bude potřeba je přepsat nebo předělat na IZO + cls.spravna_data = [ + ('gymnázium kolín', 53), + ('kolín', 53), + ('gasoš', 96), + ('Rokycany', 96), + ('gasoš Rokycany', 96), + ('SPŠE Pardubice', 815), + ('Jaroše', 164), + ("Gymnázium, Brno, tř. Kpt. Jaroše", 164), + ("Jírovcova", 157), + ('České Budějovice', 157), + ("Gymnázium, České Budějovice, Jírovcova 8", 157), + ("první soukromé", 2), + ("Gymnázium Elgartova", 147), + ("Jihlava", 45), + ('Milevsko', 223), + ("Gymnázium Milevsko", 223), + ("Gymnázium Žamberk", 257), + ("Žamberk", 257), + ("Mendelovo", 201), + ("Omská", 1038), + ("Omsk", 1038), + ("machar", 15), + ("J. S. Machar", 15), + ("Brandýs", 15), + ] + + def test_view_funguje(self): + """Jen se pokusí udělat na ten view dotaz a kouká na odpověď""" + resp = self.client.get(reverse('autocomplete_skola')) + self.assertEqual(resp.status_code, 200) + + def test_skoly_vraceny(self): + """Testuje, že pro každého orga je jeho škola ve výsledném QuerySetu""" + for pfx, id in self.spravna_data: + with self.subTest(prefix=pfx, spravne_id=id): + spravna_skola = m.Skola.objects.get(id=id) + # Zeptáme se view, co si myslí + resp = self.client.get(reverse('autocomplete_skola')+'?q='+pfx).json() + ids = [int(x['id']) for x in resp['results']] + self.assertIn(spravna_skola.id, ids, f"Škola nenalezena v odpovědi") + + def test_skoly_pocet(self): + """Testuje, že se pro dané prefixy nevrací moc škol""" + limit = 20 + for pfx, id in self.spravna_data: + # Kopírování … + with self.subTest(prefix=pfx, spravne_id=id): + resp = self.client.get(reverse('autocomplete_skola')+'?q='+pfx).json() + self.assertLessEqual(len(resp['results']), limit, f"Dotaz vrací moc škol") + diff --git a/seminar/utils.py b/seminar/utils.py index 1ff3c6e1..1c9668ec 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -366,3 +366,13 @@ def deadline(datum): return deadline_v_rocniku(datum, pozdejsi_rocnik) +def sync_skoly(base_url): + """Stáhne všechny školy z mamwebu na adrese a uloží je do databáze""" + from django.urls import reverse + full_url = base_url.rstrip('/') + reverse('export_skoly') + import requests + from django.core import serializers + json = requests.get(full_url, stream=True).content + for skola in serializers.deserialize('json', json): + skola.save() +