From c18cbc76e48b3b339a2b561df84417d4c83b458b Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Sun, 5 Feb 2017 18:22:51 +0000 Subject: [PATCH] Add tests for M2MFieldComparison --- wagtail/tests/testapp/models.py | 1 + wagtail/wagtailadmin/tests/test_compare.py | 45 +++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) 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