Example #1
0
def curator_post_vote(request, post_id):
    if request.method == 'POST':
        post = get_object_or_404(models.Post, pk=post_id)
        form = forms.VoteForm(request.POST)
        if form.is_valid():
            if services.is_topic_curator(request.user, post.topic):
                curator_type = ContentType.objects.get(app_label='manopozicija', model='curator')
                voted_for_himself = (
                    post.content_type == curator_type and
                    request.user == post.content_object.user and
                    not request.user.is_superuser
                )
                if voted_for_himself:
                    logger.debug((
                        '%r user voted for his own curator application on %r topic for %r post with vote: %r'
                    ), request.user, post.topic, post, form.cleaned_data['vote'])
                else:
                    upvotes, downvotes = services.update_curator_position(request.user, post, form.cleaned_data['vote'])
                    return JsonResponse({'success': True, 'upvotes': upvotes, 'downvotes': downvotes})
            else:
                logger.debug((
                    '%r user who is not a %r topic curator attempted to vote for %r post with vote: %r'
                ), request.user, post.topic, post, form.cleaned_data['vote'])
        else:
            logger.debug('form error: %s', form.errors.as_text())
    else:
        logger.debug('only POST is allowed, got %s instead', request.method)
    return JsonResponse({'success': False})
Example #2
0
def curator_post_vote(request, post_id):
    if request.method == 'POST':
        post = get_object_or_404(models.Post, pk=post_id)
        form = forms.VoteForm(request.POST)
        if form.is_valid():
            if services.is_topic_curator(request.user, post.topic):
                curator_type = ContentType.objects.get(
                    app_label='manopozicija', model='curator')
                voted_for_himself = (post.content_type == curator_type and
                                     request.user == post.content_object.user
                                     and not request.user.is_superuser)
                if voted_for_himself:
                    logger.debug((
                        '%r user voted for his own curator application on %r topic for %r post with vote: %r'
                    ), request.user, post.topic, post,
                                 form.cleaned_data['vote'])
                else:
                    upvotes, downvotes = services.update_curator_position(
                        request.user, post, form.cleaned_data['vote'])
                    return JsonResponse({
                        'success': True,
                        'upvotes': upvotes,
                        'downvotes': downvotes
                    })
            else:
                logger.debug((
                    '%r user who is not a %r topic curator attempted to vote for %r post with vote: %r'
                ), request.user, post.topic, post, form.cleaned_data['vote'])
        else:
            logger.debug('form error: %s', form.errors.as_text())
    else:
        logger.debug('only POST is allowed, got %s instead', request.method)
    return JsonResponse({'success': False})
Example #3
0
def test_curator_votes(app):
    users = (factories.UserFactory(first_name='u%d' % i)
             for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_curator_votes(post) == (0, 0)
    assert services.update_curator_position(next(users), post, 1) == (1, 0)
    assert services.update_curator_position(next(users), post, 1) == (2, 0)
    assert services.update_curator_position(next(users), post, -1) == (2, 1)
    assert services.get_curator_votes(post) == (2, 1)

    # Try to vote several times with the same user
    user = factories.UserFactory()
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.get_curator_votes(post) == (3, 1)

    assert services.get_curator_topic_votes(user, post.topic) == {post.pk: 1}

    # Try to vote for new curator application
    curator = factories.CuratorFactory(user=user)
    post = factories.PostFactory(content_object=curator)
    user_1, user_2, user_3 = next(users), next(users), next(users)

    # Initially user should not be a curator
    assert services.is_topic_curator(user, post.topic) is False

    # After first positive vote user shuould become a curator
    assert services.update_curator_position(user_1, post, 1) == (1, 0)
    assert services.is_topic_curator(user, post.topic) is True

    # When number of curator upvotes and downvotes becomes equal, user should be removed from curators
    assert services.update_curator_position(user_1, post, -1) == (0, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # Same thing, but with two users voting differently
    assert services.update_curator_position(user_2, post, 1) == (1, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # If third users agrees to accept new curator it will be accepted
    assert services.update_curator_position(user_3, post, 1) == (2, 1)
    assert services.is_topic_curator(user, post.topic) is True
Example #4
0
def test_curator_votes(app):
    users = (factories.UserFactory(first_name='u%d' % i) for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_curator_votes(post) == (0, 0)
    assert services.update_curator_position(next(users), post, 1) == (1, 0)
    assert services.update_curator_position(next(users), post, 1) == (2, 0)
    assert services.update_curator_position(next(users), post, -1) == (2, 1)
    assert services.get_curator_votes(post) == (2, 1)

    # Try to vote several times with the same user
    user = factories.UserFactory()
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.get_curator_votes(post) == (3, 1)

    assert services.get_curator_topic_votes(user, post.topic) == {post.pk: 1}

    # Try to vote for new curator application
    curator = factories.CuratorFactory(user=user)
    post = factories.PostFactory(content_object=curator)
    user_1, user_2, user_3 = next(users), next(users), next(users)

    # Initially user should not be a curator
    assert services.is_topic_curator(user, post.topic) is False

    # After first positive vote user shuould become a curator
    assert services.update_curator_position(user_1, post, 1) == (1, 0)
    assert services.is_topic_curator(user, post.topic) is True

    # When number of curator upvotes and downvotes becomes equal, user should be removed from curators
    assert services.update_curator_position(user_1, post, -1) == (0, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # Same thing, but with two users voting differently
    assert services.update_curator_position(user_2, post, 1) == (1, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # If third users agrees to accept new curator it will be accepted
    assert services.update_curator_position(user_3, post, 1) == (2, 1)
    assert services.is_topic_curator(user, post.topic) is True