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) request(self, url, expected_url=expected_url, data=data)