From e048285474bfcd03bae40ff174cf0349baeb2675 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Sun, 11 Jan 2026 11:20:28 +0100 Subject: [PATCH] Use TransactionTestCase for non-trivial tests to avoid mocking --- theme/tests.py | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/theme/tests.py b/theme/tests.py index 2accfe4..cdbb333 100644 --- a/theme/tests.py +++ b/theme/tests.py @@ -1,12 +1,11 @@ -from contextlib import contextmanager from unittest import TestCase as RegularTestCase from unittest.mock import patch -from django.test import TestCase as DjangoTestCase from django.contrib.auth import get_user_model from django.utils.safestring import SafeString from django.utils.html import conditional_escape from bugsink.pygments_extensions import choose_lexer_for_pattern, get_all_lexers +from bugsink.test_utils import TransactionTestCase25251 as TransactionTestCase from events.utils import IncompleteList, IncompleteDict @@ -16,12 +15,6 @@ from .templatetags.issues import ( User = get_user_model() -@contextmanager -def _mock_durable_atomic(*args, **kwargs): - """Mock durable_atomic to avoid nesting issues in tests.""" - yield - - class TestPygmentizeLineLineCountHandling(RegularTestCase): # The focus of these tests is `len(input) == len(output)`, which is hard in the presence of emptyness. # @@ -232,12 +225,10 @@ class TimestampWithMillisTagTest(RegularTestCase): self.assertFalse(isinstance(timestamp_with_millis(ts), SafeString)) -class NavigationLinksTestCase(DjangoTestCase): +class NavigationLinksTestCase(TransactionTestCase): """Tests for navigation links in base.html template.""" - @patch('bugsink.decorators.durable_atomic', _mock_durable_atomic) - @patch('bugsink.views._phone_home') - def test_superuser_sees_admin_and_normal_links(self, mock_phone_home): + def test_superuser_sees_admin_and_normal_links(self): """Superusers should see all links in the navigation.""" superuser = User.objects.create_superuser(username='admin', password='admin', email='admin@test.com') self.client.force_login(superuser) @@ -258,9 +249,7 @@ class NavigationLinksTestCase(DjangoTestCase): self.assertContains(response, '/bsmain/auth_tokens/') self.assertContains(response, 'Tokens') - @patch('bugsink.decorators.durable_atomic', _mock_durable_atomic) - @patch('bugsink.views._phone_home') - def test_user_sees_only_normal_links(self, mock_phone_home): + def test_user_sees_only_normal_links(self): """Users should see limited links in the navigation.""" user = User.objects.create_user(username='user', password='user', email='user@test.com') self.client.force_login(user) @@ -281,9 +270,7 @@ class NavigationLinksTestCase(DjangoTestCase): self.assertNotContains(response, '/bsmain/auth_tokens/') self.assertNotContains(response, 'Tokens') - @patch('bugsink.decorators.durable_atomic', _mock_durable_atomic) - @patch('bugsink.views._phone_home') - def test_anonymous_user_sees_no_links(self, mock_phone_home): + def test_anonymous_user_sees_no_links(self): """Anonymous users should see no links in the navigation.""" response = self.client.get('/', follow=True) @@ -300,4 +287,4 @@ class NavigationLinksTestCase(DjangoTestCase): self.assertNotContains(response, '/users/') self.assertNotContains(response, 'Users') self.assertNotContains(response, '/bsmain/auth_tokens/') - self.assertNotContains(response, 'Tokens') \ No newline at end of file + self.assertNotContains(response, 'Tokens')