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 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) 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.