From 4824286d31904ac319f158c15c8481eb2ba41ede Mon Sep 17 00:00:00 2001 From: Tom Talbot Date: Thu, 10 Jul 2014 16:09:42 +0100 Subject: [PATCH] Add unit tests for usage feature --- wagtail/tests/fixtures/test.json | 19 +++-- wagtail/tests/models.py | 4 +- wagtail/wagtailadmin/tests/tests.py | 19 ----- wagtail/wagtaildocs/tests.py | 104 ++++++++++++++++++++++++++++ wagtail/wagtailimages/tests.py | 55 +++++++++++++++ wagtail/wagtailsnippets/tests.py | 28 ++++++++ 6 files changed, 198 insertions(+), 31 deletions(-) diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index f31610279..a84b3ca72 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -562,6 +562,14 @@ "submit_time": "2014-01-01T12:00:00.000Z" } }, +{ + "pk": 1, + "model": "tests.AdvertPlacement", + "fields": { + "page": 2, + "advert": 1 + } +}, { "pk": 1, "model": "tests.advert", @@ -578,17 +586,6 @@ "created_at": "2014-01-01T12:00:00.000Z" } }, -{ - "pk": 1, - "model": "wagtailimages.Image", - "fields": { - "title": "test image", - "created_at": "2014-01-01T12:00:00.000Z", - "width": 0, - "height": 0 - } -}, - { "pk": 1, "model": "wagtailcore.pageviewrestriction", diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 81f30f82b..fbf78993e 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -273,9 +273,11 @@ FormPage.content_panels = [ ] -# Snippets # Snippets +class AdvertPlacement(models.Model): + page = ParentalKey('wagtailcore.Page', related_name='advert_placements') + advert = models.ForeignKey('tests.Advert', related_name='+') @python_2_unicode_compatible class Advert(models.Model): diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py index 2b5d379e4..78c76fc4a 100644 --- a/wagtail/wagtailadmin/tests/tests.py +++ b/wagtail/wagtailadmin/tests/tests.py @@ -3,10 +3,8 @@ from django.core.urlresolvers import reverse from django.core import mail from wagtail.tests.utils import WagtailTestUtils -from wagtail.tests.models import EventPage, EventPageRelatedLink from wagtail.wagtailcore.models import Page from wagtail.wagtailadmin.tasks import send_email_task -from wagtail.wagtaildocs.models import Document class TestHome(TestCase, WagtailTestUtils): @@ -46,20 +44,3 @@ class TestSendEmailTask(TestCase): self.assertEqual(mail.outbox[0].subject, "Test subject") self.assertEqual(mail.outbox[0].body, "Test content") self.assertEqual(mail.outbox[0].to, ["nobody@email.com"]) - - -class TestUsageCount(TestCase): - fixtures = ['wagtail/tests/fixtures/test.json'] - - def test_unused_document_usage_count(self): - doc = Document.objects.get(id=1) - self.assertEqual(doc.usage_count, 0) - - def test_used_document_usage_count(self): - doc = Document.objects.get(id=1) - page = EventPage.objects.get(id=4) - event_page_related_link = EventPageRelatedLink() - event_page_related_link.page = page - event_page_related_link.link_document = doc - event_page_related_link.save() - self.assertEqual(doc.usage_count, 1) diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index 79b799a36..e7a67670d 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -5,10 +5,14 @@ from django.test import TestCase from django.contrib.auth.models import User, Group, Permission from django.core.urlresolvers import reverse from django.core.files.base import ContentFile +from django.test.utils import override_settings from wagtail.wagtaildocs import models from wagtail.tests.utils import WagtailTestUtils +from wagtail.tests.models import EventPage, EventPageRelatedLink +from wagtail.wagtaildocs.models import Document + # TODO: Test serve view @@ -313,3 +317,103 @@ class TestDocumentFilenameProperties(TestCase): def tearDown(self): self.document.delete() self.extensionless_document.delete() + + +class TestUsageCount(TestCase, WagtailTestUtils): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.login() + + def test_document_usage_count_not_enabled(self): + doc = Document.objects.get(id=1) + self.assertEqual(doc.usage_count, None) + + @override_settings(USAGE_COUNT=True) + def test_unused_document_usage_count(self): + doc = Document.objects.get(id=1) + self.assertEqual(doc.usage_count, 0) + + @override_settings(USAGE_COUNT=True) + def test_used_document_usage_count(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + self.assertEqual(doc.usage_count, 1) + + def test_usage_count_does_not_appear(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertNotContains(response, 'Used 1 Time') + + @override_settings(USAGE_COUNT=True) + def test_usage_count_appears(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertContains(response, 'Used 1 Time') + + @override_settings(USAGE_COUNT=True) + def test_usage_count_zero_appears(self): + response = self.client.get(reverse('wagtaildocs_edit_document', + args=(1,))) + self.assertContains(response, 'Used 0 Times') + + +class TestUsedBy(TestCase, WagtailTestUtils): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.login() + + def test_document_used_by_not_enabled(self): + doc = Document.objects.get(id=1) + self.assertEqual(doc.used_by, []) + + @override_settings(USAGE_COUNT=True) + def test_unused_document_used_by(self): + doc = Document.objects.get(id=1) + self.assertEqual(doc.used_by, []) + + @override_settings(USAGE_COUNT=True) + def test_used_document_used_by(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + self.assertEqual(doc.used_by, [page]) + + @override_settings(USAGE_COUNT=True) + def test_usage_page(self): + doc = Document.objects.get(id=1) + page = EventPage.objects.get(id=4) + event_page_related_link = EventPageRelatedLink() + event_page_related_link.page = page + event_page_related_link.link_document = doc + event_page_related_link.save() + response = self.client.get(reverse('wagtaildocs_document_usage', + args=(1,))) + self.assertContains(response, 'Christmas') + + @override_settings(USAGE_COUNT=True) + def test_usage_page_no_usage(self): + response = self.client.get(reverse('wagtaildocs_document_usage', + args=(1,))) + # There's no usage so there should be no table rows + self.assertRegexpMatches(response.content, '(\s|\n)*') diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 48a31ae89..1258f0131 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -2,6 +2,7 @@ from mock import MagicMock from django.utils import six from django.test import TestCase +from django.test.utils import override_settings from django import template from django.contrib.auth.models import User, Group, Permission from django.core.urlresolvers import reverse @@ -17,6 +18,8 @@ from wagtail.wagtailimages.formats import ( from wagtail.wagtailimages.backends import get_image_backend from wagtail.wagtailimages.backends.pillow import PillowBackend +from wagtail.tests.models import EventPage, EventPageCarouselItem + def get_test_image_file(): from six import BytesIO @@ -470,3 +473,55 @@ class TestFormat(TestCase): register_image_format(self.format) result = get_image_format('test name') self.assertEqual(result, self.format) + + +class TestUsageCount(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_image_usage_count_not_enabled(self): + self.assertEqual(self.image.usage_count, None) + + @override_settings(USAGE_COUNT=True) + def test_unused_image_usage_count(self): + self.assertEqual(self.image.usage_count, 0) + + @override_settings(USAGE_COUNT=True) + def test_used_image_document_usage_count(self): + page = EventPage.objects.get(id=4) + event_page_carousel_item = EventPageCarouselItem() + event_page_carousel_item.page = page + event_page_carousel_item.image = self.image + event_page_carousel_item.save() + self.assertEqual(self.image.usage_count, 1) + + +class TestUsedBy(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def setUp(self): + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_image_used_by_not_enabled(self): + self.assertEqual(self.image.used_by, []) + + @override_settings(USAGE_COUNT=True) + def test_unused_image_used_by(self): + self.assertEqual(self.image.used_by, []) + + @override_settings(USAGE_COUNT=True) + def test_used_image_document_used_by(self): + page = EventPage.objects.get(id=4) + event_page_carousel_item = EventPageCarouselItem() + event_page_carousel_item.page = page + event_page_carousel_item.image = self.image + event_page_carousel_item.save() + self.assertEqual(self.image.used_by, [page]) diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 61bf9baaf..d8e109327 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -2,6 +2,7 @@ from django.test import TestCase from django.core.urlresolvers import reverse from wagtail.tests.utils import WagtailTestUtils +from django.test.utils import override_settings from wagtail.tests.models import Advert, AlphaSnippet, ZuluSnippet from wagtail.wagtailsnippets.models import register_snippet, SNIPPET_MODELS @@ -9,6 +10,7 @@ from wagtail.wagtailsnippets.views.snippets import ( get_snippet_edit_handler ) from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel +from wagtail.wagtailcore.models import Page class TestSnippetIndexView(TestCase, WagtailTestUtils): @@ -185,3 +187,29 @@ class TestSnippetOrdering(TestCase): # may get registered elsewhere during test self.assertLess(SNIPPET_MODELS.index(AlphaSnippet), SNIPPET_MODELS.index(ZuluSnippet)) + + +class TestUsageCount(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def test_snippet_usage_count_not_enabled(self): + advert = Advert.objects.get(id=1) + self.assertEqual(advert.usage_count(), None) + + @override_settings(USAGE_COUNT=True) + def test_snippet_usage_count(self): + advert = Advert.objects.get(id=1) + self.assertEqual(advert.usage_count(), 1) + + +class TestUsedBy(TestCase): + fixtures = ['wagtail/tests/fixtures/test.json'] + + def test_snippet_used_by_not_enabled(self): + advert = Advert.objects.get(id=1) + self.assertEqual(advert.used_by(), []) + + @override_settings(USAGE_COUNT=True) + def test_snippet_used_by(self): + advert = Advert.objects.get(id=1) + self.assertEqual(type(advert.used_by()[0]), Page)