From b21b975252c8659054629d4a0c14d87dd8b60d98 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Wed, 27 Aug 2025 10:25:21 +0200 Subject: [PATCH] chore(startpage/tests): test uncovered lines --- jdav_web/startpage/models.py | 2 +- jdav_web/startpage/tests.py | 51 +++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/jdav_web/startpage/models.py b/jdav_web/startpage/models.py index d252b64..a04bd08 100644 --- a/jdav_web/startpage/models.py +++ b/jdav_web/startpage/models.py @@ -88,7 +88,7 @@ class Image(models.Model): max_upload_size=10) def __str__(self): - return os.path.basename(self.f.name) if self.f.name else _("Empty") + return os.path.basename(self.f.name) if self.f.name else str(_("Empty")) class Meta: verbose_name = _('image') diff --git a/jdav_web/startpage/tests.py b/jdav_web/startpage/tests.py index 94ab953..ea76e0d 100644 --- a/jdav_web/startpage/tests.py +++ b/jdav_web/startpage/tests.py @@ -1,8 +1,10 @@ +import os from django.test import TestCase, Client -from django.urls import reverse +from django.urls import reverse, NoReverseMatch from django.conf import settings from django.templatetags.static import static from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from django.core.files.uploadedfile import SimpleUploadedFile from unittest import mock from importlib import reload @@ -10,7 +12,7 @@ from importlib import reload from members.models import Member, Group, DIVERSE from startpage import urls -from .models import Post, Section, Image +from .models import Post, Section, Image, Link, MemberOnPost class BasicTestCase(TestCase): @@ -25,7 +27,7 @@ class BasicTestCase(TestCase): file = SimpleUploadedFile("post_image.jpg", b"file_content", content_type="image/jpeg") staff_post = Post.objects.create(title='Staff', urlname='staff', website_text='This is our staff: Peter.', section=orga) - Image.objects.create(post=staff_post, f=file) + self.image_with_file = Image.objects.create(post=staff_post, f=file) file = SimpleUploadedFile("member_image.jpg", b"file_content", content_type="image/jpeg") m = Member.objects.create(prename='crazy', lastname='cool', birth_date=timezone.now().date(), email=settings.TEST_MAIL, gender=DIVERSE, @@ -39,6 +41,10 @@ class BasicTestCase(TestCase): crazy_post.groups.add(crazy_group) crazy_post.save() + self.post_no_section = Post.objects.create(title='No Section', urlname='no-section', section=None) + self.image_no_file = Image.objects.create(post=staff_post) + self.test_link = Link.objects.create(title='Test Link', url='https://example.com') + class ModelsTestCase(BasicTestCase): def test_str(self): @@ -66,6 +72,41 @@ class ModelsTestCase(BasicTestCase): '/de/{name}/last-trip'.format(name=settings.REPORTS_SECTION)) self.assertEqual(post3.absolute_urlname(), reverse('startpage:post', args=(reports.urlname, 'last-trip'))) + def test_post_absolute_section_none(self): + """Test Post.absolute_section when section is None""" + self.assertEqual(self.post_no_section.absolute_section(), 'Aktuelles') + + def test_post_absolute_urlname_no_section(self): + """Test Post.absolute_urlname when section is None""" + expected_url = reverse('startpage:post', args=('aktuelles', 'no-section')) + self.assertEqual(self.post_no_section.absolute_urlname(), expected_url) + + def test_image_str_without_file(self): + """Test Image.__str__ when no file is associated""" + self.assertEqual(str(self.image_no_file), str(_('Empty'))) + + def test_image_str_with_file(self): + """Test Image.__str__ when file is associated""" + # The str should return basename of the file + expected = os.path.basename(self.image_with_file.f.name) + self.assertEqual(str(self.image_with_file), expected) + + def test_link_str(self): + """Test Link.__str__ method""" + self.assertEqual(str(self.test_link), 'Test Link') + + def test_section_absolute_urlname_no_reverse_match(self): + """Test Section.absolute_urlname when NoReverseMatch occurs""" + section = Section.objects.get(urlname='orga') + with mock.patch('startpage.models.reverse', side_effect=NoReverseMatch): + self.assertEqual(section.absolute_urlname(), str(_('deactivated'))) + + def test_post_absolute_urlname_no_reverse_match(self): + """Test Post.absolute_urlname when NoReverseMatch occurs""" + post = Post.objects.get(urlname='staff') + with mock.patch('startpage.models.reverse', side_effect=NoReverseMatch): + self.assertEqual(post.absolute_urlname(), str(_('deactivated'))) + class ViewTestCase(BasicTestCase): def test_index(self): @@ -137,9 +178,7 @@ class ViewTestCase(BasicTestCase): def test_post_image(self): c = Client() - staff_post = Post.objects.get(urlname='staff') - img = Image.objects.get(post=staff_post) - url = img.f.url + url = self.image_with_file.f.url response = c.get('/de' + url) self.assertEqual(response.status_code, 200, 'Images on posts should be visible without login.')