Skip to content

Commit 5969ef9

Browse files
author
Lucas Wiman
committed
Add tests for middleware history behavior
1 parent 18866a5 commit 5969ef9

File tree

1 file changed

+51
-3
lines changed

1 file changed

+51
-3
lines changed

simple_history/tests/tests/test_admin.py

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django_webtest import WebTest
55
from django.contrib.admin import AdminSite
66
from django.contrib.messages.storage.fallback import FallbackStorage
7+
from django.db.transaction import atomic
78
from django.test.utils import override_settings
89
from django.test.client import RequestFactory
910
from django import VERSION
@@ -184,19 +185,66 @@ def test_history_user_not_saved(self):
184185
)
185186

186187
def test_middleware_saves_user(self):
188+
Book.objects.all().delete()
187189
overridden_settings = {
188190
'MIDDLEWARE_CLASSES':
189191
settings.MIDDLEWARE_CLASSES
190192
+ ['simple_history.middleware.HistoryRequestMiddleware'],
191193
}
192194
with override_settings(**overridden_settings):
193195
self.login()
194-
poll = Poll.objects.create(question="why?", pub_date=today)
195-
historical_poll = poll.history.all()[0]
196-
self.assertEqual(historical_poll.history_user, self.user,
196+
form = self.app.get(reverse('admin:tests_book_add')).form
197+
form["isbn"] = "9780147_513731"
198+
form.submit()
199+
book = Book.objects.get()
200+
historical_book = book.history.all()[0]
201+
202+
self.assertEqual(historical_book.history_user, self.user,
197203
"Middleware should make the request available to "
198204
"retrieve history_user.")
199205

206+
def test_middleware_unsets_request(self):
207+
overridden_settings = {
208+
'MIDDLEWARE_CLASSES':
209+
settings.MIDDLEWARE_CLASSES
210+
+ ['simple_history.middleware.HistoryRequestMiddleware'],
211+
}
212+
with override_settings(**overridden_settings):
213+
self.login()
214+
self.app.get(reverse('admin:tests_book_add'))
215+
self.assertFalse(hasattr(HistoricalRecords.thread, 'request'))
216+
217+
def test_rolled_back_user_does_not_lead_to_foreign_key_error(self):
218+
# This test simulates the rollback of a user after a request (which
219+
# happens, e.g. in test cases), and verifies that subsequently
220+
# creating a new entry does not fail with a foreign key error.
221+
222+
class Rollback(Exception):
223+
pass
224+
225+
overridden_settings = {
226+
'MIDDLEWARE_CLASSES':
227+
settings.MIDDLEWARE_CLASSES
228+
+ ['simple_history.middleware.HistoryRequestMiddleware'],
229+
}
230+
with override_settings(**overridden_settings):
231+
try:
232+
with atomic():
233+
user = User.objects.create_superuser(
234+
'tmp', '[email protected]', 'pass')
235+
self.assertTrue(self.client.login(username='tmp', password='pass'))
236+
self.app.get(reverse('admin:tests_book_add'))
237+
raise Rollback()
238+
except Rollback:
239+
pass
240+
241+
book = Book.objects.create(isbn="9780147_513731")
242+
historical_book = book.history.all()[0]
243+
self.assertIsNone(
244+
historical_book.history_user,
245+
"No way to know of request, history_user should be unset.",
246+
)
247+
200248
def test_middleware_anonymous_user(self):
201249
overridden_settings = {
202250
'MIDDLEWARE_CLASSES':

0 commit comments

Comments
 (0)