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
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky