Example #1
0
    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)
Example #2
0
 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)
Example #3
0
    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)
Example #4
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".')
Example #5
0
    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"你好")
Example #6
0
    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)
Example #7
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)
Example #8
0
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)
Example #9
0
    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")
Example #10
0
 def test_nonexistent_tag(self):
     self.assertEquals(get_tag("mouse"), None)
Example #11
0
 def test_with_primary_key(self):
     self.assertEquals(get_tag(self.cheese.id), self.cheese)
Example #12
0
 def test_with_string(self):
     self.assertEquals(get_tag("cheese"), self.cheese)
Example #13
0
 def test_with_tag_instance(self):
     self.assertEquals(get_tag(self.cheese), self.cheese)