diff --git a/wagtail/tests/testapp/models.py b/wagtail/tests/testapp/models.py
index bd2b46637b..4b972a6fe5 100644
--- a/wagtail/tests/testapp/models.py
+++ b/wagtail/tests/testapp/models.py
@@ -197,6 +197,7 @@ class EventPageSpeaker(Orderable, LinkFields):
]
+@python_2_unicode_compatible
class EventCategory(models.Model):
name = models.CharField("Name", max_length=255)
diff --git a/wagtail/wagtailadmin/tests/test_compare.py b/wagtail/wagtailadmin/tests/test_compare.py
index c2d5828651..a0f5bba8ec 100644
--- a/wagtail/wagtailadmin/tests/test_compare.py
+++ b/wagtail/wagtailadmin/tests/test_compare.py
@@ -7,7 +7,7 @@ from django.utils.functional import curry
from django.utils.safestring import SafeText
from wagtail.tests.testapp.models import (
- EventPage, EventPageSpeaker, SimplePage, StreamPage, TaggedPage)
+ EventCategory, EventPage, EventPageSpeaker, SimplePage, StreamPage, TaggedPage)
from wagtail.wagtailadmin import compare
from wagtail.wagtailcore.blocks import StreamValue
from wagtail.wagtailimages import get_image_model
@@ -255,6 +255,49 @@ class TestTagsFieldComparison(TestCase):
self.assertTrue(comparison.has_changed())
+class TestM2MFieldComparison(TestCase):
+ fixtures = ['test.json']
+ comparison_class = compare.M2MFieldComparison
+
+ def setUp(self):
+ self.meetings_category = EventCategory.objects.create(name='Meetings')
+ self.parties_category = EventCategory.objects.create(name='Parties')
+ self.holidays_category = EventCategory.objects.create(name='Holidays')
+
+ def test_hasnt_changed(self):
+ christmas_event = EventPage.objects.get(url_path='/home/events/christmas/')
+ saint_patrick_event = EventPage.objects.get(url_path='/home/events/saint-patrick/')
+
+ christmas_event.categories = [self.meetings_category, self.parties_category]
+ saint_patrick_event.categories = [self.meetings_category, self.parties_category]
+
+ comparison = self.comparison_class(
+ EventPage._meta.get_field('categories'), christmas_event, saint_patrick_event
+ )
+
+ self.assertTrue(comparison.is_field)
+ self.assertFalse(comparison.is_child_relation)
+ self.assertEqual(comparison.field_label(), "Categories")
+ self.assertFalse(comparison.has_changed())
+ self.assertEqual(comparison.htmldiff(), 'Meetings, Parties')
+ self.assertIsInstance(comparison.htmldiff(), SafeText)
+
+ def test_has_changed(self):
+ christmas_event = EventPage.objects.get(url_path='/home/events/christmas/')
+ saint_patrick_event = EventPage.objects.get(url_path='/home/events/saint-patrick/')
+
+ christmas_event.categories = [self.meetings_category, self.parties_category]
+ saint_patrick_event.categories = [self.meetings_category, self.holidays_category]
+
+ comparison = self.comparison_class(
+ EventPage._meta.get_field('categories'), christmas_event, saint_patrick_event
+ )
+
+ self.assertTrue(comparison.has_changed())
+ self.assertEqual(comparison.htmldiff(), 'Meetings, Parties, Holidays')
+ self.assertIsInstance(comparison.htmldiff(), SafeText)
+
+
class TestForeignObjectComparison(TestCase):
comparison_class = compare.ForeignObjectComparison