def test_add_tag(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, "foo bar baz") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags) # try to add a tag that already exists Tag.objects.add_tag(self.dead_parrot, "foo") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags) # now add a tag that doesn't already exist Tag.objects.add_tag(self.dead_parrot, "zip") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 4) self.failUnless(get_tag("zip") in tags) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags)
def test_create_with_tags_specified(self): f1 = FormTest.objects.create(tags=u"test3 test2 test1") tags = Tag.objects.get_for_object(f1) test1_tag = get_tag("test1") test2_tag = get_tag("test2") test3_tag = get_tag("test3") self.failUnless(None not in (test1_tag, test2_tag, test3_tag)) self.assertEquals(len(tags), 3) self.failUnless(test1_tag in tags) self.failUnless(test2_tag in tags) self.failUnless(test3_tag in tags)
def test_update_tags_with_none(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, "foo bar baz") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags) Tag.objects.update_tags(self.dead_parrot, None) tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 0)
def test_add_tag_invalid_input_multiple_tags_specified(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, "foo bar baz") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags) try: Tag.objects.add_tag(self.dead_parrot, "one two") except AttributeError, ae: self.assertEquals(str(ae), 'Multiple tags were given: "one two".')
def test_update_tags_exotic_characters(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, "foo bar baz") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags) Tag.objects.update_tags(self.dead_parrot, u"ŠĐĆŽćžšđ") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 1) self.assertEquals(tags[0].name, u"ŠĐĆŽćžšđ") Tag.objects.update_tags(self.dead_parrot, u"你好") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 1) self.assertEquals(tags[0].name, u"你好")
def test_update_via_tags_field(self): f1 = FormTest.objects.create(tags=u"test3 test2 test1") tags = Tag.objects.get_for_object(f1) test1_tag = get_tag("test1") test2_tag = get_tag("test2") test3_tag = get_tag("test3") self.failUnless(None not in (test1_tag, test2_tag, test3_tag)) self.assertEquals(len(tags), 3) self.failUnless(test1_tag in tags) self.failUnless(test2_tag in tags) self.failUnless(test3_tag in tags) f1.tags = u"test4" f1.save() tags = Tag.objects.get_for_object(f1) test4_tag = get_tag("test4") self.assertEquals(len(tags), 1) self.assertEquals(tags[0], test4_tag) f1.tags = "" f1.save() tags = Tag.objects.get_for_object(f1) self.assertEquals(len(tags), 0)
def test_update_tags(self): Tag.objects.update_tags(self.dead_parrot, 'foo,bar,"ter"') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("foo") in tags) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("ter") in tags) Tag.objects.update_tags(self.dead_parrot, '"foo" bar "baz"') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag("bar") in tags) self.failUnless(get_tag("baz") in tags) self.failUnless(get_tag("foo") in tags)
def tagged_object_list(request, queryset_or_model=None, tag=None, related_tags=False, related_tag_counts=True, **kwargs): """ A thin wrapper around ``django.views.generic.list_detail.object_list`` which creates a ``QuerySet`` containing instances of the given queryset or model tagged with the given tag. In addition to the context variables set up by ``object_list``, a ``tag`` context variable will contain the ``Tag`` instance for the tag. If ``related_tags`` is ``True``, a ``related_tags`` context variable will contain tags related to the given tag for the given model. Additionally, if ``related_tag_counts`` is ``True``, each related tag will have a ``count`` attribute indicating the number of items which have it in addition to the given tag. """ if queryset_or_model is None: try: queryset_or_model = kwargs.pop('queryset_or_model') except KeyError: raise AttributeError(_('tagged_object_list must be called with a queryset or a model.')) if tag is None: try: tag = kwargs.pop('tag') except KeyError: raise AttributeError(_('tagged_object_list must be called with a tag.')) tag_instance = get_tag(tag) if tag_instance is None: raise Http404(_('No Tag found matching "%s".') % tag) queryset = TaggedItem.objects.get_by_model(queryset_or_model, tag_instance) if not kwargs.has_key('extra_context'): kwargs['extra_context'] = {} kwargs['extra_context']['tag'] = tag_instance if related_tags: kwargs['extra_context']['related_tags'] = \ Tag.objects.related_for_model(tag_instance, queryset_or_model, counts=related_tag_counts) return object_list(request, queryset, **kwargs)
def test_force_lowercase_tags(self): """ Test forcing tags to lowercase. """ settings.FORCE_LOWERCASE_TAGS = True Tag.objects.update_tags(self.dead_parrot, "foO bAr Ter") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) foo_tag = get_tag("foo") bar_tag = get_tag("bar") ter_tag = get_tag("ter") self.failUnless(foo_tag in tags) self.failUnless(bar_tag in tags) self.failUnless(ter_tag in tags) Tag.objects.update_tags(self.dead_parrot, "foO bAr baZ") tags = Tag.objects.get_for_object(self.dead_parrot) baz_tag = get_tag("baz") self.assertEquals(len(tags), 3) self.failUnless(bar_tag in tags) self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) Tag.objects.add_tag(self.dead_parrot, "FOO") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(bar_tag in tags) self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) Tag.objects.add_tag(self.dead_parrot, "Zip") tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 4) zip_tag = get_tag("zip") self.failUnless(bar_tag in tags) self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) self.failUnless(zip_tag in tags) f1 = FormTest.objects.create() f1.tags = u"TEST5" f1.save() tags = Tag.objects.get_for_object(f1) test5_tag = get_tag("test5") self.assertEquals(len(tags), 1) self.failUnless(test5_tag in tags) self.assertEquals(f1.tags, u"test5")
def test_nonexistent_tag(self): self.assertEquals(get_tag("mouse"), None)
def test_with_primary_key(self): self.assertEquals(get_tag(self.cheese.id), self.cheese)
def test_with_string(self): self.assertEquals(get_tag("cheese"), self.cheese)
def test_with_tag_instance(self): self.assertEquals(get_tag(self.cheese), self.cheese)