Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.1 KiB
85 lines
3.1 KiB
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
|
|
from unittest import expectedFailure
|
|
|
|
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),
|
|
]
|
|
# Následující aktuálně neumíme matchnout. Jsou v separátním
|
|
# testu jako expected failure, kdyby / až začnou fungovat, tak
|
|
# je odsud odeberme a výš odkomentujme.
|
|
cls.failujici_data = [
|
|
('gasoš', 96),
|
|
('gasoš Rokycany', 96),
|
|
('SPŠE Pardubice', 815),
|
|
("Gymnázium, Brno, tř. Kpt. Jaroše", 164),
|
|
("první soukromé", 2),
|
|
]
|
|
|
|
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")
|
|
@expectedFailure
|
|
def test_skoly_vraceny_failujici(self):
|
|
"""Orgové mají své školy v autocomplete (Expected Failure)"""
|
|
for pfx, id in self.failujici_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")
|
|
|
|
|