Пример #1
0
    def test_add_tags_new_taggeditem(self):
        """
        add_tags function should only create a Tag if it doesn't already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test existing tag with different taggeditem
        orange = food_model.objects.create(name="orange")
        add_tags(orange, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(orange.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green'),('orange','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category1),
                                       [('apple','green'),('orange','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green'),('orange','green')])
Пример #2
0
    def test_multiple_tags_multiple_users(self):
        user1 = UserF(username="******")
        person1 = Person(user=user1)
        person1.save()

        user2 = UserF(username="******")
        person2 = Person(user=user2)
        person2.save()

        user3 = UserF(username="******")
        person3 = Person(user=user3)
        person3.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person1, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tagged_item = add_tags(person2, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        tagged_item = add_tags(person2, 'TagB',
                                'staff-directory-test-category', user1, 'person')
        tagged_item = add_tags(person3, 'TagB',
                                'staff-directory-test-category', user2, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 1)
        self.assertIn(user2.email, emails)
Пример #3
0
    def test_single_tag_multiple_users(self):
        user1 = UserF(username="******")
        person1 = Person(user=user1)
        person1.save()

        user2 = UserF(username="******")
        person2 = Person(user=user2)
        person2.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person1, 'TagA',
                               'staff-directory-test-category', user1,
                               'person')
        tagged_item = add_tags(person2, 'TagA',
                               'staff-directory-test-category', user1,
                               'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 2)
        self.assertIn(user1.email, emails)
        self.assertIn(user2.email, emails)
Пример #4
0
    def test_add_tags_new_taggeditem(self):
        """
        add_tags function should only create a Tag if it doesn't already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test existing tag with different taggeditem
        orange = food_model.objects.create(name="orange")
        add_tags(orange, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(orange.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green'), ('orange', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category1),
            [('apple', 'green'), ('orange', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1),
            [('apple', 'green'), ('orange', 'green')])
Пример #5
0
def detail(request, idea_id):
    """
    Detail view; idea_id must be a string containing an int.
    """
    idea = get_object_or_404(Idea, pk=int(idea_id))
    if request.method == 'POST':
        tag_form = IdeaTagForm(request.POST)
        if tag_form.is_valid():
            data = tag_form.clean()['tags']
            tags = [tag.strip() for tag in data.split(',')
                    if tag.strip() != '']
            try:
                for t in tags:
                    add_tags(idea, t, None, request.user, 'idea')
            except NameError:  # catch if add_tags doesn't exist
                idea.tags.add(*tags)
            return HttpResponseRedirect(
                reverse('idea:idea_detail', args=(idea.id,)))
    else:
        tag_form = IdeaTagForm()

    voters = idea.voters.all()

    for v in voters:
        try:
            v.profile = v.get_profile()
        except (ObjectDoesNotExist, SiteProfileNotAvailable):
            v.profile = None

    idea_type = ContentType.objects.get(app_label="idea", model="idea")

    tags = idea.tags.extra(select={
        'tag_count': """
            SELECT COUNT(*) from taggit_taggeditem tt
            WHERE tt.tag_id = taggit_tag.id
            AND content_type_id = %s
        """
    }, select_params=[idea_type.id]).order_by('name')

    tags_created_by_user = []
    if COLLAB_TAGS:
        for tag in tags:
            tag.tag_url = "%s?tags=%s" % (reverse('idea:idea_list'), tag.slug)
            for ti in tag.taggit_taggeditem_items.filter(tag_creator=request.user,
                                                         content_type__name="idea",
                                                         object_id=idea_id):
                tags_created_by_user.append(tag.name)

    return _render(request, 'idea/detail.html', {
        'idea': idea,  # title, body, user name, user photo, time
        'support': request.user in voters,
        'tags': tags,
        'tags_created_by_user': tags_created_by_user,
        'voters': voters,
        'tag_form': tag_form
    })
Пример #6
0
def detail(request, idea_id):
    """
    Detail view; idea_id must be a string containing an int.
    """
    idea = get_object_or_404(Idea, pk=int(idea_id))
    if request.method == 'POST':
        tag_form = IdeaTagForm(request.POST)
        if tag_form.is_valid():
            data = tag_form.clean()['tags']
            tags = [tag.strip() for tag in data.split(',')
                    if tag.strip() != '']
            try:
                for t in tags:
                    add_tags(idea, t, None, request.user, 'idea')
            except NameError:  # catch if add_tags doesn't exist
                idea.tags.add(*tags)
            return HttpResponseRedirect(
                reverse('idea:idea_detail', args=(idea.id,)))
    else:
        tag_form = IdeaTagForm()

    voters = idea.voters.all()

    for v in voters:
        try:
            v.profile = v.get_profile()
        except (ObjectDoesNotExist, SiteProfileNotAvailable):
            v.profile = None

    idea_type = ContentType.objects.get(app_label="idea", model="idea")

    tags = idea.tags.extra(select={
        'tag_count': """
            SELECT COUNT(*) from taggit_taggeditem tt
            WHERE tt.tag_id = taggit_tag.id
            AND content_type_id = %s
        """
    }, select_params=[idea_type.id]).order_by('name')

    tags_created_by_user = []
    if COLLAB_TAGS:
        for tag in tags:
            tag.tag_url = "%s?tags=%s" % (reverse('idea:idea_list'), tag.slug)
            for ti in tag.taggit_taggeditem_items.filter(tag_creator=request.user,
                                                         content_type__name="idea",
                                                         object_id=idea_id):
                tags_created_by_user.append(tag.name)

    return _render(request, 'idea/detail.html', {
        'idea': idea,  # title, body, user name, user photo, time
        'support': request.user in voters,
        'tags': tags,
        'tags_created_by_user': tags_created_by_user,
        'voters': voters,
        'tag_form': tag_form
    })
Пример #7
0
 def save(self):
     instance = super(IdeaForm, self).save(commit=False)
     # add tags separately
     tags = self.cleaned_data.get('tags', [])
     self.cleaned_data['tags'] = []
     instance.save()
     try:
         for t in tags:
             add_tags(instance, t, None, instance.creator, 'idea')
     except NameError:  # catch if add_tags doesn't exist
         instance.tags.add(*tags)
     return instance
Пример #8
0
 def save(self):
     instance = super(IdeaForm, self).save(commit=False)
     # add tags separately
     tags = self.cleaned_data.get('tags', [])
     self.cleaned_data['tags'] = []
     instance.save()
     try:
         for t in tags:
             add_tags(instance, t, None, instance.creator, 'idea')
     except NameError:  # catch if add_tags doesn't exist
         instance.tags.add(*tags)
     return instance
Пример #9
0
    def test_tag_remove_exists_for_creator(self):
        """
        Detail page allows for removal of tags created by the current user
        """
        user1 = login(self)
        idea = models.Idea(creator=user1, title='AAAA', 
                state = models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        response = self.client.get(reverse("idea:idea_detail", args=(str(idea.id),)))
        self.assertContains(response, 'aaa')
        self.assertContains(response, 'tag_remove')
Пример #10
0
    def test_tag_remove_not_exists_for_random_user(self):
        """
        Detail page does not allow for removal of tags created by a different user
        """
        self.client.login(username='******', password='******')
        user1 = random_user()
        idea = models.Idea(creator=user1, title='AAAA', 
                state = models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        response = self.client.get(reverse("idea:idea_detail", args=(str(idea.id),)))
        self.assertContains(response, 'aaa')
        self.assertNotContains(response, 'tag_remove')
Пример #11
0
    def test_tag_remove_exists_for_creator(self):
        """
        Detail page allows for removal of tags created by the current user
        """
        user1 = login(self)
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        response = self.client.get(
            reverse("idea:idea_detail", args=(str(idea.id), )))
        self.assertContains(response, 'aaa')
        self.assertContains(response, 'tag_remove')
Пример #12
0
def add_tag(req,
            person_stub='',
            tag='',
            category_slug='',
            is_ajax=False,
            redirect_to_tags_page=False):
    """
        adds a tag to a user if they do not have tagging turned off
    """
    if req.method == 'POST':
        if tag == '':
            tag = req.POST.get('tag', '').strip()
        if category_slug == '':
            category_slug = req.POST.get('tag_category_slug', '').strip()
        if tag == '':
            return json_response(
                {'error': 'Please enter a tag that is not blank.'})
        elif person_stub == '':
            return json_response({'error': 'Person not found.'})
        person = Person.objects.get(stub=person_stub)
        # make sure tag does not already exist
        try:
            taggeditem = TaggedItem.objects.get(
                tag_category__slug=category_slug,
                object_id=person.id,
                tag__name__iexact=tag)
        except Exception:
            taggeditem = add_tags(person, tag, category_slug, req.user,
                                  'person')
            person.expire_cache()
            expire_cache_group('tags')

        url = reverse('staff_directory:person', args=[person.stub])
        if person.user != req.user:
            email_info = EmailInfo(
                subject='You were tagged in the staff directory!',
                text_template='staff_directory/email/user_tagged.txt',
                html_template='staff_directory/email/user_tagged.html',
                to_address=person.user.email,
            )
            # set notification
            title = '%s %s tagged you with "%s"' % \
                (req.user.first_name, req.user.last_name, tag)
            Notification.set_notification(req.user, req.user, "tagged", tag,
                                          person.user, title, url, email_info)
        if is_ajax:
            if redirect_to_tags_page:
                return json_response({
                    'redirect':
                    reverse('staff_directory:show_by_tag',
                            args=[taggeditem.tag.slug])
                })
            return json_response({
                'redirect':
                reverse('staff_directory:person', args=[person.stub])
            })
        else:
            return HttpResponseRedirect(
                reverse('staff_directory:person', args=[person.stub]))
Пример #13
0
    def test_org_group_page_with_tags(self):
        """
            Tests the org group filters by tag.
        """
        org = OrgGroup.objects.filter(pk=69)[0]
        person_tagged = org.person_set.all()[0]
        person_not_tagged = org.person_set.all()[1]

        add_tags(person_tagged, 'TagA',
                  'staff-directory-my-expertise', person_tagged.user, 'person')

        resp = self.client.get(reverse(
            'staff_directory:org_group_with_tags', args=(org.title, 'taga')))
        self.assertContains(resp, escape(
            person_tagged.full_name), status_code=200)
        self.assertNotContains(resp, escape(
            person_not_tagged.full_name), status_code=200)
Пример #14
0
    def test_profile_page_with_removed_tagger(self):
        """
            Tests the profile page appears with no errors.
        """
        person = Person.objects.all()[1]

        user = get_user_model()(first_name="Baba", last_name="O'Reilly")
        user.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        add_tags(person, 'TagA',
                  'staff-directory-test-category', user, 'person')

        resp = self.client.get(reverse('staff_directory:person', args=(person.stub,)))
        self.assertContains(resp, person.full_name, status_code=200)
Пример #15
0
    def test_multiple_tags_single_user(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person, 'TagA', 'staff-directory-test-category',
                               user, 'person')
        tags.append(tagged_item.tag.slug)
        tagged_item = add_tags(person, 'TagB', 'staff-directory-test-category',
                               user, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 1)
        self.assertIn(user.email, emails)
Пример #16
0
    def test_multiple_tags_single_user(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person, 'TagA',
                                'staff-directory-test-category', user, 'person')
        tags.append(tagged_item.tag.slug)
        tagged_item = add_tags(person, 'TagB',
                                'staff-directory-test-category', user, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 1)
        self.assertIn(user.email, emails)
Пример #17
0
    def test_tag_remove_not_exists_for_different_idea(self):
        """
        Detail page does not allow for removal of tags created by a different user
        """
        user1 = login(self)
        user2 = random_user()
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        idea2 = models.Idea(creator=user2,
                            title='BBBB',
                            state=models.State.objects.get(name='Active'))
        idea2.save()
        add_tags(idea, 'AAA', None, user1, 'idea')
        add_tags(idea2, 'AAA', None, user2, 'idea')

        response = self.client.get(
            reverse("idea:idea_detail", args=(str(idea2.id), )))
        self.assertContains(response, 'aaa')
        self.assertNotContains(response, 'tag_remove')
Пример #18
0
    def test_add_tags_duplicate_tag(self):
        """
        add_tags function should only create a Tag if it doesn't already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test exact duplicate
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test duplicate with different category/user/content_type
        user2 = self.random_user()
        category2 = self.random_tag_category()
        food_model2 = Pet
        food_model2.objects.create(name="apple")
        add_tags(apple, 'green', category2.slug, user2, 'pet')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
Пример #19
0
    def test_add_tags_duplicate_tag(self):
        """
        add_tags function should only create a Tag if it doesn't already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test exact duplicate
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])

        #  test duplicate with different category/user/content_type
        user2 = self.random_user()
        category2 = self.random_tag_category()
        food_model2 = Pet
        food_model2.objects.create(name="apple")
        add_tags(apple, 'green', category2.slug, user2, 'pet')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
Пример #20
0
    def test_create_tags_for_person(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tagged_item = add_tags(person, 'TagA',
                                'staff-directory-test-category', user, 'person')

        self.assertEqual(1, person.tags.count())
Пример #21
0
    def test_create_tags_for_person(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tagged_item = add_tags(person, 'TagA', 'staff-directory-test-category',
                               user, 'person')

        self.assertEqual(1, person.tags.count())
Пример #22
0
    def test_tag_remove(self):
        """
        Detail page tag form submission should add tags.
        """
        user1 = random_user()
        idea = models.Idea(creator=user1, title='AAAA', 
                state = models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        # Attempting to remove as a different user fails
        req = RequestFactory().post('/', {})
        req.user = random_user()
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertIn('aaa', set([tag.slug for tag in idea.tags.all()]))

        # Attempting to remove as the creator succeeds
        req.user = user1
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertNotIn('aaa', set([tag.slug for tag in idea.tags.all()]))
Пример #23
0
def add_tag(req, person_stub='', tag='', category_slug='', is_ajax=False,
            redirect_to_tags_page=False):
    """
        adds a tag to a user if they do not have tagging turned off
    """
    if req.method == 'POST':
        if tag == '':
            tag = req.POST.get('tag', '').strip()
        if category_slug == '':
            category_slug = req.POST.get('tag_category_slug', '').strip()
        if tag == '':
            return json_response({'error':
                                 'Please enter a tag that is not blank.'})
        elif person_stub == '':
            return json_response({'error':
                                 'Person not found.'})
        person = Person.objects.get(stub=person_stub)
        # make sure tag does not already exist
        try:
            taggeditem = TaggedItem.objects.get(
                tag_category__slug=category_slug, object_id=person.id,
                tag__name__iexact=tag)
        except Exception:
            taggeditem = add_tags(person, tag, category_slug, req.user,
                                  'person')
            person.expire_cache()
            expire_cache_group('tags')

        url = reverse('staff_directory:person', args=[person.stub])
        if person.user != req.user:
            email_info = EmailInfo(
                subject='You were tagged in the staff directory!',
                text_template='staff_directory/email/user_tagged.txt',
                html_template='staff_directory/email/user_tagged.html',
                to_address=person.user.email,
            )
            # set notification
            title = '%s %s tagged you with "%s"' % \
                (req.user.first_name, req.user.last_name, tag)
            Notification.set_notification(req.user, req.user, "tagged", tag,
                                          person.user, title, url, email_info)
        if is_ajax:
            if redirect_to_tags_page:
                return json_response({'redirect':
                                       reverse('staff_directory:show_by_tag',
                                               args=[taggeditem.tag.slug])})
            return json_response({'redirect':
                                   reverse('staff_directory:person', args=[person.stub])})
        else:
            return HttpResponseRedirect(reverse('staff_directory:person',
                                                args=[person.stub]))
Пример #24
0
    def test_tag_remove(self):
        """
        Detail page tag form submission should add tags.
        """
        user1 = random_user()
        idea = models.Idea(creator=user1,
                           title='AAAA',
                           state=models.State.objects.get(name='Active'))
        idea.save()
        add_tags(idea, 'AAA', None, user1, 'idea')

        # Attempting to remove as a different user fails
        req = RequestFactory().post('/', {})
        req.user = random_user()
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertIn('aaa', set([tag.slug for tag in idea.tags.all()]))

        # Attempting to remove as the creator succeeds
        req.user = user1
        response = views.remove_tag(req, str(idea.id), 'aaa')
        self.assertEqual(response.status_code, 302)
        self.assertNotIn('aaa', set([tag.slug for tag in idea.tags.all()]))
Пример #25
0
    def test_no_emails(self):
        user1 = UserF(username="******")
        person1 = Person(user=user1)
        person1.save()

        user2 = UserF(username="******")
        person2 = Person(user=user2)
        person2.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person1, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        tagged_item = add_tags(person2, 'TagB',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertEqual(len(emails), 0)
Пример #26
0
    def test_add_tags_util(self):
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category1),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green')])

        # test null category
        user2 = self.random_user()
        add_tags(apple, 'yellow', None, user2, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green', 'yellow'])
        self.assert_tags_equal(food_model.tags.all(), ['green', 'yellow'])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green'), ('apple', 'yellow')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=None),
            [('apple', 'yellow')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user2),
            [('apple', 'yellow')])

        # test null user
        category2 = self.random_tag_category()
        add_tags(apple, 'red', category2.slug, None, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green', 'yellow', 'red'])
        self.assert_tags_equal(food_model.tags.all(),
                               ['green', 'yellow', 'red'])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green'), ('apple', 'yellow'), ('apple', 'red')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category2),
            [('apple', 'red')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=None), [('apple', 'red')])

        # test null content_type
        self.assertRaises(IndexError, add_tags, apple, 'red', category2.slug,
                          user2, 'bad_content_type')
        self.assertRaises(IndexError, add_tags, apple, 'red', category2.slug,
                          user2, None)
Пример #27
0
    def test_add_tags_util(self):
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category1),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green')])

        # test null category
        user2 = self.random_user()
        add_tags(apple, 'yellow', None, user2, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green', 'yellow'])
        self.assert_tags_equal(food_model.tags.all(), ['green', 'yellow'])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green'), ('apple','yellow')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=None),
                                       [('apple','yellow')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user2),
                                       [('apple','yellow')])

        # test null user
        category2 = self.random_tag_category()
        add_tags(apple, 'red', category2.slug, None, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green', 'yellow', 'red'])
        self.assert_tags_equal(food_model.tags.all(), ['green', 'yellow', 'red'])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green'), ('apple','yellow'), ('apple','red')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category2),
                                       [('apple','red')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=None),
                                       [('apple','red')])

        # test null content_type
        self.assertRaises(IndexError, add_tags, apple, 'red', category2.slug, user2, 'bad_content_type')
        self.assertRaises(IndexError, add_tags, apple, 'red', category2.slug, user2, None)
Пример #28
0
    def test_add_tags_duplicate_taggeditem(self):
        """
        add_tags function should only create a TaggedItem if it doesn't
        already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category1),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green')])

        #  test exact duplicate
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category1),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green')])

        #  test duplicate with different category
        category2 = self.random_tag_category()
        add_tags(apple, 'green', category2.slug, user1, 'food')
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='food'),
                                       [('apple','green'), ('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category2),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green'),('apple','green')])

        #  test duplicate with different content_type
        food_model2 = Pet
        food_model2.objects.create(name="apple", id=apple.id)
        add_tags(apple, 'green', category2.slug, user1, 'pet')
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='pet'),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category2),
                                       [('apple','green'),('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green'),('apple','green'),('apple','green')])

        #  test duplicate with different creator
        user2 = self.random_user()
        add_tags(apple, 'green', category2.slug, user2, 'food')
        self.assert_tagged_items_equal(TaggedItem.objects.filter(content_type__name='pet'),
                                       [('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_category=category2),
                                       [('apple','green'), ('apple','green')])
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user2),
                                       [])
        #  ensure the old user didn't change either
        self.assert_tagged_items_equal(TaggedItem.objects.filter(tag_creator=user1),
                                       [('apple','green'),('apple','green'),('apple','green')])
Пример #29
0
    def test_add_tags_duplicate_taggeditem(self):
        """
        add_tags function should only create a TaggedItem if it doesn't
        already exist
        """
        food_model = Food
        apple = food_model.objects.create(name="apple")
        self.assertEqual(list(apple.tags.all()), [])
        self.assertEqual(list(food_model.tags.all()), [])

        user1 = self.random_user()
        category1 = self.random_tag_category()
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tags_equal(apple.tags.all(), ['green'])
        self.assert_tags_equal(food_model.tags.all(), ['green'])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category1),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green')])

        #  test exact duplicate
        add_tags(apple, 'green', category1.slug, user1, 'food')
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category1),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green')])

        #  test duplicate with different category
        category2 = self.random_tag_category()
        add_tags(apple, 'green', category2.slug, user1, 'food')
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='food'),
            [('apple', 'green'), ('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category2),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green'),
                                                           ('apple', 'green')])

        #  test duplicate with different content_type
        food_model2 = Pet
        food_model2.objects.create(name="apple", id=apple.id)
        add_tags(apple, 'green', category2.slug, user1, 'pet')
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='pet'),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category2),
            [('apple', 'green'), ('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green'),
                                                           ('apple', 'green'),
                                                           ('apple', 'green')])

        #  test duplicate with different creator
        user2 = self.random_user()
        add_tags(apple, 'green', category2.slug, user2, 'food')
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(content_type__name='pet'),
            [('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_category=category2),
            [('apple', 'green'), ('apple', 'green')])
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user2), [])
        #  ensure the old user didn't change either
        self.assert_tagged_items_equal(
            TaggedItem.objects.filter(tag_creator=user1), [('apple', 'green'),
                                                           ('apple', 'green'),
                                                           ('apple', 'green')])