2025-10-21 13:35:24 +00:00
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
2025-11-10 11:05:40 +00:00
|
|
|
request(self, url, expected_url=expected_url, data=data)
|