Skip to content

Commit a6e392b

Browse files
committed
Tests and fixe the TaggedObjectList view
1 parent f859628 commit a6e392b

File tree

4 files changed

+99
-2
lines changed

4 files changed

+99
-2
lines changed

tagging/tests/tests.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from django.utils import six
88
from django.db.models import Q
99
from django.test import TestCase
10+
from django.test.utils import override_settings
11+
from django.core.exceptions import ImproperlyConfigured
1012

1113
from tagging import settings
1214
from tagging.forms import TagField
@@ -1031,3 +1033,61 @@ def test_tag_d_validation(self):
10311033
self.assertRaises(
10321034
forms.ValidationError, t.clean,
10331035
'foo qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbn bar')
1036+
1037+
1038+
#########
1039+
# Views #
1040+
#########
1041+
1042+
1043+
@override_settings(
1044+
ROOT_URLCONF='tagging.tests.urls',
1045+
TEMPLATE_LOADERS=(
1046+
'tagging.tests.utils.VoidLoader',
1047+
),
1048+
)
1049+
class TestTaggedObjectList(TestCase):
1050+
1051+
def setUp(self):
1052+
self.a1 = Article.objects.create(name='article 1')
1053+
self.a2 = Article.objects.create(name='article 2')
1054+
Tag.objects.update_tags(self.a1, 'static tag test')
1055+
Tag.objects.update_tags(self.a2, 'static test')
1056+
1057+
def get_view(self, url, queries=1, code=200,
1058+
expected_items=1,
1059+
friendly_context='article_list',
1060+
template='tests/article_list.html'):
1061+
with self.assertNumQueries(queries):
1062+
response = self.client.get(url)
1063+
self.assertEquals(response.status_code, code)
1064+
1065+
if code == 200:
1066+
self.assertTrue(isinstance(response.context['tag'], Tag))
1067+
self.assertEqual(len(response.context['object_list']),
1068+
expected_items)
1069+
self.assertEqual(response.context['object_list'],
1070+
response.context[friendly_context])
1071+
self.assertTemplateUsed(response, template)
1072+
return response
1073+
1074+
def test_view_static(self):
1075+
self.get_view('/static/', expected_items=2)
1076+
1077+
def test_view_dynamic(self):
1078+
self.get_view('/tag/', expected_items=1)
1079+
1080+
def test_view_related(self):
1081+
response = self.get_view('/static/related/',
1082+
queries=2, expected_items=2)
1083+
self.assertEquals(len(response.context['related_tags']), 2)
1084+
1085+
def test_view_no_queryset_no_model(self):
1086+
self.assertRaises(ImproperlyConfigured, self.get_view,
1087+
'/no-query-no-model/')
1088+
1089+
def test_view_no_tag(self):
1090+
self.assertRaises(AttributeError, self.get_view, '/no-tag/')
1091+
1092+
def test_view_404(self):
1093+
self.get_view('/unavailable/', code=404)

tagging/tests/urls.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
"""Test urls for tagging."""
2+
from django.conf.urls import url
3+
4+
from tagging.views import TaggedObjectList
5+
from tagging.tests.models import Article
6+
7+
8+
class StaticTaggedObjectList(TaggedObjectList):
9+
tag = 'static'
10+
queryset = Article.objects.all()
11+
12+
13+
urlpatterns = [
14+
url(r'^static/$', StaticTaggedObjectList.as_view()),
15+
url(r'^static/related/$', StaticTaggedObjectList.as_view(
16+
related_tags=True)),
17+
url(r'^no-tag/$', TaggedObjectList.as_view(model=Article)),
18+
url(r'^no-query-no-model/$', TaggedObjectList.as_view()),
19+
url(r'^(?P<tag>[^/]+(?u))/$', TaggedObjectList.as_view(model=Article)),
20+
]

tagging/tests/utils.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""
2+
Tests utils for tagging.
3+
"""
4+
5+
from django.template.loader import BaseLoader
6+
7+
class VoidLoader(BaseLoader):
8+
"""
9+
Template loader which is always returning
10+
an empty template.
11+
"""
12+
is_usable = True
13+
_accepts_engine_in_init = True
14+
15+
def load_template_source(self, template_name, template_dirs=None):
16+
return ('', 'voidloader:%s' % template_name)

tagging/views.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from tagging.models import Tag
1010
from tagging.models import TaggedItem
1111
from tagging.utils import get_tag
12+
from tagging.utils import get_queryset_and_model
1213

1314

1415
class TaggedObjectList(ListView):
@@ -71,7 +72,7 @@ def get_context_data(self, **kwargs):
7172
context['tag'] = self.tag_instance
7273

7374
if self.related_tags:
75+
queryset, model = get_queryset_and_model(self.queryset_or_model)
7476
context['related_tags'] = Tag.objects.related_for_model(
75-
self.tag_instance, self.queryset_or_model,
76-
counts=self.related_tag_counts)
77+
self.tag_instance, model, counts=self.related_tag_counts)
7778
return context

0 commit comments

Comments
 (0)