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
|
||||
# oauthlib
|
||||
# python-openid
|
||||
# requests
|
||||
requests
|
||||
# requests-oauthlib
|
||||
|
||||
# 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)
|
||||
|
||||
|
||||
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