forked from beba/foerderbarometer
added admin tests
This commit is contained in:
parent
a750f0d7d2
commit
ebd7ebd3fd
|
|
@ -1,2 +1,3 @@
|
||||||
|
from .admin import AdminTestCase
|
||||||
from .models import ModelTestCase
|
from .models import ModelTestCase
|
||||||
from .views import AuthenticatedViewTestCase, AnonymousViewTestCase
|
from .views import AuthenticatedViewTestCase, AnonymousViewTestCase
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from django.core import mail
|
||||||
|
from django.forms import model_to_dict
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from input.models import (
|
||||||
|
Project,
|
||||||
|
ProjectRequest,
|
||||||
|
ProjectDeclined,
|
||||||
|
Library,
|
||||||
|
ELiterature,
|
||||||
|
Email,
|
||||||
|
IFG,
|
||||||
|
Literature,
|
||||||
|
List,
|
||||||
|
Travel,
|
||||||
|
Software,
|
||||||
|
BusinessCard, ProjectCategory, WikimediaProject, Account,
|
||||||
|
)
|
||||||
|
from input.utils.admin import admin_url
|
||||||
|
from input.utils.testing import request, create_superuser, login
|
||||||
|
|
||||||
|
|
||||||
|
class AdminTestCase(TestCase):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
cls.user = user = create_superuser('admin', first_name='Max', last_name='Mustermann')
|
||||||
|
|
||||||
|
cls.data = data = {
|
||||||
|
'realname': f'{user.first_name} {user.last_name}',
|
||||||
|
'email': user.email,
|
||||||
|
}
|
||||||
|
|
||||||
|
cls.objs = [
|
||||||
|
ProjectCategory.objects.order_by('?').first(),
|
||||||
|
WikimediaProject.objects.order_by('?').first(),
|
||||||
|
Project.objects.create(**data, granted=True),
|
||||||
|
ProjectRequest.objects.create(**data, granted=None),
|
||||||
|
ProjectDeclined.objects.create(**data, granted=False),
|
||||||
|
Library.objects.create(**data, library='Test'),
|
||||||
|
ELiterature.objects.create(**data, library='Test'),
|
||||||
|
Software.objects.create(**data, library='Test'),
|
||||||
|
Email.objects.create(**data),
|
||||||
|
IFG.objects.create(**data),
|
||||||
|
Literature.objects.create(**data, selfbuy_give_data=False),
|
||||||
|
List.objects.create(**data),
|
||||||
|
Travel.objects.create(**data),
|
||||||
|
BusinessCard.objects.create(**data),
|
||||||
|
]
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
login(self)
|
||||||
|
|
||||||
|
def test_changelists(self):
|
||||||
|
for obj in self.objs:
|
||||||
|
model = type(obj)
|
||||||
|
url = admin_url(model, 'changelist')
|
||||||
|
|
||||||
|
with self.subTest(model=model):
|
||||||
|
request(self, url)
|
||||||
|
|
||||||
|
def test_change_views(self):
|
||||||
|
for obj in self.objs:
|
||||||
|
model = type(obj)
|
||||||
|
url = admin_url(model, 'change', obj.id)
|
||||||
|
|
||||||
|
with self.subTest(model=model):
|
||||||
|
request(self, url)
|
||||||
|
|
||||||
|
def test_display_values(self):
|
||||||
|
for obj in self.objs:
|
||||||
|
model = type(obj)
|
||||||
|
|
||||||
|
with self.subTest(model=model):
|
||||||
|
self.assertTrue(f'{obj}')
|
||||||
|
|
||||||
|
def test_grant_project_request(self):
|
||||||
|
account = Account.objects.create(code='test')
|
||||||
|
category = ProjectCategory.objects.first()
|
||||||
|
wikimedia = WikimediaProject.objects.first()
|
||||||
|
obj = ProjectRequest.objects.create(
|
||||||
|
**self.data,
|
||||||
|
name='Test',
|
||||||
|
description='Test',
|
||||||
|
otrs='https://example.com',
|
||||||
|
granted=None,
|
||||||
|
start=datetime.date(2025, 1, 1),
|
||||||
|
end=datetime.date(2026, 1, 1),
|
||||||
|
)
|
||||||
|
|
||||||
|
obj.categories.add(category)
|
||||||
|
obj.wikimedia_projects.add(wikimedia)
|
||||||
|
|
||||||
|
url = admin_url(ProjectRequest, 'change', obj.id)
|
||||||
|
expected_url = admin_url(ProjectRequest, 'changelist')
|
||||||
|
data = {
|
||||||
|
**model_to_dict(obj),
|
||||||
|
'granted': True,
|
||||||
|
'granted_date': obj.start,
|
||||||
|
'granted_from': self.user.username,
|
||||||
|
'account': account.code,
|
||||||
|
'categories': [category.id],
|
||||||
|
'wikimedia_projects': [wikimedia.id],
|
||||||
|
}
|
||||||
|
|
||||||
|
for key in list(data):
|
||||||
|
if data[key] is None:
|
||||||
|
data.pop(key)
|
||||||
|
|
||||||
|
with self.captureOnCommitCallbacks(execute=True):
|
||||||
|
request(self, url, expected_url=expected_url, data=data)
|
||||||
|
|
||||||
|
self.assertEqual(len(mail.outbox), 2)
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.db.models import Model
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
def admin_url(model: type[Model], view: str, *args, site=None, **kwargs) -> str:
|
||||||
|
return reverse(admin_url_name(model, view, site=site), args=args, kwargs=kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def admin_url_name(model: type[Model], view: str, *, site=None) -> str:
|
||||||
|
namespace = (site or admin.site).name
|
||||||
|
view_name = admin_view_name(model, view)
|
||||||
|
|
||||||
|
return f'{namespace}:{view_name}'
|
||||||
|
|
||||||
|
|
||||||
|
def admin_view_name(model: type[Model], view: str) -> str:
|
||||||
|
return f'{model._meta.app_label}_{model._meta.model_name}_{view}'
|
||||||
Loading…
Reference in New Issue