Refactored to polyphonic package
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
from django.test import TestCase
|
||||
from polyphonic.interface import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils import timezone
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class AccessTestCase(TestCase):
|
||||
USERS = ()
|
||||
|
||||
ENSEMBLES = ()
|
||||
|
||||
PROJECTS = ()
|
||||
|
||||
PROTECTED_URLS = ()
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
cls.users = {}
|
||||
for details in cls.USERS:
|
||||
cls.users[details["username"]] = User.objects.create_user(**details)
|
||||
|
||||
now = timezone.now()
|
||||
|
||||
cls.ensembles = {}
|
||||
for details in cls.ENSEMBLES:
|
||||
admins = details.pop("admins", [])
|
||||
obj = models.Ensemble.objects.create(**details)
|
||||
for admin in admins:
|
||||
obj.admins.add(cls.users[admin])
|
||||
cls.ensembles[obj.slug] = obj
|
||||
|
||||
cls.projects = {}
|
||||
for details in cls.PROJECTS:
|
||||
when = details.pop("when", 0)
|
||||
ensemble = details.pop("ensemble")
|
||||
details["event_date"] = now + timedelta(days=when) if when else None
|
||||
obj = cls.ensembles[ensemble].projects.create(**details)
|
||||
cls.projects[details["name"]] = obj
|
||||
|
||||
return
|
||||
|
||||
def test_protected_views(self):
|
||||
self.assertAccess({x: False for x in self.PROTECTED_URLS})
|
||||
|
||||
if "admin" in self.users:
|
||||
self.client.force_login(self.users["admin"])
|
||||
self.assertAccess({x: True for x in self.PROTECTED_URLS})
|
||||
|
||||
def login(self, user, passwd):
|
||||
response = self.client.post("/login", {"username": user, "password": passwd})
|
||||
self.assertEqual(response.status_code, 302, f"Failed to login as {user}")
|
||||
|
||||
def authorize(self, model, **kwargs):
|
||||
object = model.objects.get(**kwargs)
|
||||
response = self.client.get(f"{object.get_absolute_url()}?auth={object.auth()}")
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
def assertAccess(self, urls):
|
||||
for url, expected in urls.items():
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(
|
||||
response.status_code == 200,
|
||||
expected,
|
||||
f"Expected {expected} for {url} (status: {response.status_code})",
|
||||
)
|
||||
|
||||
def assertObjectList(self, response, expected, element="name"):
|
||||
self.assertEqual(response.status_code, 200, "No result returned")
|
||||
objects = response.context["object_list"].values_list(element, flat=True)
|
||||
self.assertEqual(list(objects), expected)
|
||||
Reference in New Issue
Block a user