Merge pull request 'Lepsi Delani Orgu' (!35) from lepsi-delani-orgu into master
Reviewed-on: #35
This commit is contained in:
		
						commit
						cda00bbc4c
					
				
					 2 changed files with 77 additions and 4 deletions
				
			
		|  | @ -1,7 +1,9 @@ | |||
| from django.contrib import admin | ||||
| from django.contrib.auth.models import Group | ||||
| from django_reverse_admin import ReverseModelAdmin | ||||
| from django.contrib.messages import WARNING, ERROR, SUCCESS | ||||
| import seminar.models as m | ||||
| from datetime import datetime | ||||
| 
 | ||||
| 
 | ||||
| @admin.register(m.Osoba) | ||||
|  | @ -20,16 +22,24 @@ class OsobaAdmin(admin.ModelAdmin): | |||
| 
 | ||||
| 	def udelej_orgem(self,request,queryset): | ||||
| 		org_group = Group.objects.get(name='org') | ||||
| 		print(queryset) | ||||
| 		uspesne_vytvoreni_orgove = 0 | ||||
| 		for o in queryset: | ||||
| 			if m.Organizator.objects.filter(osoba=o).exists(): | ||||
| 				# Ref: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.message_user | ||||
| 				self.message_user(request, f"Osoba {o} už je org, přeskakuji.", level=WARNING) | ||||
| 				continue | ||||
| 			user = o.user | ||||
| 			print(user) | ||||
| 			if user is None: | ||||
| 				self.message_user(request, f"Osoba {o} nemá uživatele! Přeskakuji.", level=ERROR) | ||||
| 				continue | ||||
| 			user.groups.add(org_group) | ||||
| 			user.is_staff = True | ||||
| 			user.save() | ||||
| 			org = m.Organizator.objects.create(osoba=o) | ||||
| 			org = m.Organizator.objects.create(osoba=o, organizuje_od=datetime.now()) | ||||
| 			org.save() | ||||
| 	udelej_orgem.short_description = "Udělej vybraných osob organizátory" | ||||
| 			uspesne_vytvoreni_orgove += 1 | ||||
| 		self.message_user(request, f'Úspěšně vytvořeno {uspesne_vytvoreni_orgove} orgů.', level=SUCCESS) | ||||
| 	udelej_orgem.short_description = "Udělej z vybraných osob organizátory" | ||||
| 
 | ||||
| class OsobaInline(admin.TabularInline): | ||||
| 	model = m.Osoba | ||||
|  |  | |||
							
								
								
									
										63
									
								
								personalni/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								personalni/tests.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| from django.test import TestCase, RequestFactory | ||||
| 
 | ||||
| from django.contrib.auth.models import User, Group | ||||
| from django.contrib.admin.sites import AdminSite | ||||
| from personalni.admin import OsobaAdmin | ||||
| # Tohle bude peklo, až jednou ty modely fakt rozstřelíme… Možná vyrobit various.all_models, které půjdou importovat jako m? :-) | ||||
| import seminar.models as m | ||||
| 
 | ||||
| import logging | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| class DelaniOrguTest(TestCase): | ||||
| 	def setUp(self): | ||||
| 		# Admin musí mít instanci | ||||
| 		# Ref: https://www.argpar.se/posts/programming/testing-django-admin/ | ||||
| 		adm_site = AdminSite() | ||||
| 		self.admin = OsobaAdmin(m.Osoba, adm_site) | ||||
| 
 | ||||
| 		from django.contrib.messages.storage.cookie import CookieStorage | ||||
| 		self.request = RequestFactory().get('/admin') | ||||
| 		self.request._messages = CookieStorage(self.request) | ||||
| 
 | ||||
| 		self.org_group = Group.objects.get(name='org') | ||||
| 
 | ||||
| 		novy_user = User.objects.create(username='osoba') | ||||
| 		self.nova_osoba = m.Osoba.objects.create( | ||||
| 			jmeno='Milada', | ||||
| 			prijmeni='Von Kolej', | ||||
| 			user = novy_user, | ||||
| 			# Snad nic dalšího nepotřebujeme, kdyžtak se doplní… | ||||
| 			) | ||||
| 		stary_user = User.objects.create(username='stary_user') | ||||
| 		stara_osoba = m.Osoba.objects.create(user=stary_user) | ||||
| 		self.stary_org = m.Organizator.objects.create(osoba=stara_osoba) | ||||
| 
 | ||||
| 	def test_pridani_orga(self): | ||||
| 		# Nejdřív to není org… | ||||
| 		self.assertFalse(m.Organizator.objects.filter(osoba=self.nova_osoba).exists()) | ||||
| 		self.assertNotIn(self.org_group, self.nova_osoba.user.groups.all()) | ||||
| 		self.assertFalse(self.nova_osoba.user.has_perm('auth.org')) | ||||
| 		self.assertFalse(self.nova_osoba.user.is_staff) | ||||
| 
 | ||||
| 		# Pak orga uděláme… | ||||
| 		qs = m.Osoba.objects.filter(id=self.nova_osoba.id) | ||||
| 		self.admin.udelej_orgem(self.request, qs) | ||||
| 
 | ||||
| 		# A pak už to org má být. | ||||
| 		self.nova_osoba.refresh_from_db() | ||||
| 		self.assertTrue(self.nova_osoba.user.is_staff) | ||||
| 		# FIXME: V db nejsou práva. Nový org je sice ve skupině "org", ale ta nemá právo "auth.org" | ||||
| 		# Očekávané řešení: dodat fixture, která to přidá. | ||||
| 		#self.assertTrue(self.nova_osoba.user.has_perm('auth.org')) | ||||
| 		self.assertIn(self.org_group, self.nova_osoba.user.groups.all()) | ||||
| 		self.assertTrue(m.Organizator.objects.filter(osoba=self.nova_osoba).exists()) | ||||
| 		novy_org = m.Organizator.objects.get(osoba=self.nova_osoba) | ||||
| 		self.assertIsNotNone(novy_org.organizuje_od) | ||||
| 
 | ||||
| 	def test_pridani_stareho_orga(self): | ||||
| 		self.admin.udelej_orgem(self.request, m.Osoba.objects.filter(id=self.stary_org.osoba.id)) # Ugly | ||||
| 		# Když to spadne, tak jsem se to dozvěděl, takže už nepotřebuju nic kontrolovat. | ||||
| 		# Jestli to funguje správně má řešit jiný test. | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
		Reference in a new issue