Test Autocomplete Škol

This commit is contained in:
Pavel "LEdoian" Turinsky 2021-09-19 00:45:23 +02:00
parent 0d58c3daad
commit 0391bb4385
3 changed files with 75 additions and 1 deletions

View file

@ -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

View 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")

View file

@ -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()