63 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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, udelej_orgem
 | |
| # Tohle bude peklo, až jednou ty modely fakt rozstřelíme… Možná vyrobit various.all_models, které půjdou importovat jako m? :-)
 | |
| import personalni.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)
 | |
| 		udelej_orgem(self.admin, 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):
 | |
| 		udelej_orgem(self.admin, 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.
 | |
| 
 | |
| 
 |