Test Autocomplete Škol
This commit is contained in:
parent
0d58c3daad
commit
0391bb4385
3 changed files with 75 additions and 1 deletions
|
@ -51,7 +51,7 @@ Werkzeug==0.14.1
|
||||||
# django-allauth
|
# django-allauth
|
||||||
# oauthlib
|
# oauthlib
|
||||||
# python-openid
|
# python-openid
|
||||||
# requests
|
requests
|
||||||
# requests-oauthlib
|
# requests-oauthlib
|
||||||
|
|
||||||
# uWSGI
|
# uWSGI
|
||||||
|
|
64
seminar/test_skola_autocomplete.py
Normal file
64
seminar/test_skola_autocomplete.py
Normal file
|
@ -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")
|
||||||
|
|
|
@ -366,3 +366,13 @@ def deadline(datum):
|
||||||
return deadline_v_rocniku(datum, pozdejsi_rocnik)
|
return deadline_v_rocniku(datum, pozdejsi_rocnik)
|
||||||
|
|
||||||
|
|
||||||
|
def sync_skoly(base_url):
|
||||||
|
"""Stáhne všechny školy z mamwebu na adrese <base_url> 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()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue