Add a test for adding and editing tagged snippets

This commit is contained in:
Tim Heap 2015-08-20 17:24:57 +10:00
parent 5b1450722a
commit 6dc2aecdd0
3 changed files with 72 additions and 0 deletions

View file

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import taggit.managers
import modelcluster.fields
class Migration(migrations.Migration):
dependencies = [
('taggit', '0001_initial'),
('tests', '0006_image_file_size'),
]
operations = [
migrations.CreateModel(
name='AdvertTag',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('content_object', modelcluster.fields.ParentalKey(related_name='tagged_items', to='tests.Advert')),
('tag', models.ForeignKey(related_name='tests_adverttag_items', to='taggit.Tag')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='advert',
name='tags',
field=taggit.managers.TaggableManager(to='taggit.Tag', through='tests.AdvertTag', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'),
),
]

View file

@ -5,6 +5,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.encoding import python_2_unicode_compatible
from taggit.models import TaggedItemBase
from taggit.managers import TaggableManager
from modelcluster.fields import ParentalKey
from modelcluster.contrib.taggit import ClusterTaggableManager
@ -302,14 +303,22 @@ class AdvertPlacement(models.Model):
advert = models.ForeignKey('tests.Advert', related_name='+')
colour = models.CharField(max_length=255)
class AdvertTag(TaggedItemBase):
content_object = ParentalKey('Advert', related_name='tagged_items')
@python_2_unicode_compatible
class Advert(models.Model):
url = models.URLField(null=True, blank=True)
text = models.CharField(max_length=255)
tags = TaggableManager(through=AdvertTag, blank=True)
panels = [
FieldPanel('url'),
FieldPanel('text'),
FieldPanel('tags'),
]
def __str__(self):

View file

@ -4,6 +4,8 @@ from django.test.utils import override_settings
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from taggit.models import Tag
from wagtail.tests.utils import WagtailTestUtils
from wagtail.tests.testapp.models import Advert, SnippetChooserModel
from wagtail.tests.snippets.models import AlphaSnippet, ZuluSnippet, RegisterDecorator, RegisterFunction
@ -90,6 +92,20 @@ class TestSnippetCreateView(TestCase, WagtailTestUtils):
self.assertEqual(snippets.count(), 1)
self.assertEqual(snippets.first().url, 'http://www.example.com/')
def test_create_with_tags(self):
tags = ['hello', 'world']
response = self.post(post_data={'text': 'test_advert',
'url': 'http://example.com/',
'tags': ', '.join(tags)})
self.assertRedirects(response, reverse('wagtailsnippets:list',
args=('tests', 'advert')))
snippet = Advert.objects.get(text='test_advert')
self.assertEqual(
list(snippet.tags.order_by('name')),
list(Tag.objects.order_by('name').filter(name__in=tags)))
class TestSnippetEditView(TestCase, WagtailTestUtils):
fixtures = ['test.json']
@ -135,6 +151,20 @@ class TestSnippetEditView(TestCase, WagtailTestUtils):
self.assertEqual(snippets.count(), 1)
self.assertEqual(snippets.first().url, 'http://www.example.com/edited')
def test_edit_with_tags(self):
tags = ['hello', 'world']
response = self.post(post_data={'text': 'edited_test_advert',
'url': 'http://www.example.com/edited',
'tags': ', '.join(tags)})
self.assertRedirects(response, reverse('wagtailsnippets:list',
args=('tests', 'advert')))
snippet = Advert.objects.get(text='edited_test_advert')
self.assertEqual(
list(snippet.tags.order_by('name')),
list(Tag.objects.order_by('name').filter(name__in=tags)))
class TestSnippetDelete(TestCase, WagtailTestUtils):
fixtures = ['test.json']