63 lines
2.5 KiB

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.