diff --git a/wafer/compare/admin.py b/wafer/compare/admin.py index a2248124..2b0bc58e 100644 --- a/wafer/compare/admin.py +++ b/wafer/compare/admin.py @@ -162,9 +162,9 @@ def comparelist_view(self, request, object_id, extra_context=None): { "revision": version.revision, "url": reverse("%s:%s_%s_compare" % (self.admin_site.name, opts.app_label, opts.model_name), args=(quote(version.object_id), version.id)), - } for version in self._reversion_order_version_queryset(Version.objects.get_for_object_reference( + } for version in Version.objects.get_for_object_reference( self.model, - object_id).select_related("revision__user"))] + object_id).select_related("revision__user")] context = {"action_list": action_list, "opts": opts, "object_id": quote(object_id), diff --git a/wafer/compare/tests/__init__.py b/wafer/compare/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/wafer/compare/tests/test_wafer_compare_list.py b/wafer/compare/tests/test_wafer_compare_list.py new file mode 100644 index 00000000..8fa9b8c8 --- /dev/null +++ b/wafer/compare/tests/test_wafer_compare_list.py @@ -0,0 +1,59 @@ +# This tests the basic compare list, to ensure it's working as expected + +import re + +from django.contrib.auth import get_user_model +from django.utils.timezone import datetime, now + +from django.test import Client, TestCase + +from reversion import revisions + +from wafer.talks.models import Talk, TalkType, SUBMITTED +from wafer.talks.tests.fixtures import create_talk +from wafer.tests.utils import create_user + + +class TestBasicCompareList(TestCase): + """Basic talk tests""" + + def setUp(self): + """Setup a user with a talk""" + talk_user = create_user('john') + self.super = create_user('super', superuser=True) + self.talk_a = create_talk('This is a test talk', status=SUBMITTED, user=talk_user) + # Create a base revision + with revisions.create_revision(): + self.talk_a.save() + # Edit 1 + self.talk_a.abstract = "This is an abstract" + with revisions.create_revision(): + self.talk_a.save() + self.talk_a.abstract = "This is not an abstract" + with revisions.create_revision(): + self.talk_a.save() + self.client = Client() + # We use an re here as the revision numbers aren't guaranteed to be stable + # across different databases + self.compare_re = re.compile('/admin/talks/talk/[0-9]+/[0-9]+/compare/') + + def test_get_compare_list(self): + """Get the compare list and check the number of entries""" + self.client.login(username="super", password="super_password") + response = self.client.get(f'/admin/talks/talk/{self.talk_a.pk}/comparelist/') + # Check we have exactly 3 revisions to compare + results = self.compare_re.findall(response.content.decode()) + self.assertEqual(len(results), 3) + + def test_get_diffs(self): + """Check that diffs look sensible""" + self.client.login(username="super", password="super_password") + response = self.client.get(f'/admin/talks/talk/{self.talk_a.pk}/comparelist/') + results = self.compare_re.findall(response.content.decode()) + # we grab the second to look at the abstract changes + url = results[1] + response = self.client.get(url) + # Check that the 'not' we added is marked + # This should maybe a regex to avoid assumptions about the whitespace + # positioning. + self.assertIn(b'>not ', response.content)