Пример #1
0
def create_topic_event(topic, user, upvotes, downvotes, title, source, date):
    user = user or UserFactory()
    timestamp = datetime.datetime.strptime(date, '%Y-%m-%d')
    event = services.create_event(user, topic, {
        'type': models.Event.DOCUMENT,
        'title': title,
        'source_link': _get_source_link(source, date),
        'source_title': source,
        'timestamp': timestamp,
    })
    post = event.post.first()
    position = 1 if upvotes > downvotes else -1 if upvotes < downvotes else 0
    services.update_user_position(user, post, position)
    return post
Пример #2
0
def create_topic_event(topic, user, upvotes, downvotes, title, source, date):
    user = user or UserFactory()
    timestamp = datetime.datetime.strptime(date, '%Y-%m-%d')
    event = services.create_event(user, topic, {
        'type': models.Event.DOCUMENT,
        'title': title,
        'source_link': _get_source_link(source, date),
        'source_title': source,
        'timestamp': timestamp,
    })
    post = event.post.first()
    position = 1 if upvotes > downvotes else -1 if upvotes < downvotes else 0
    services.update_user_position(user, post, position)
    return post
Пример #3
0
def user_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():
            upvotes, downvotes = services.update_user_position(request.user, post, form.cleaned_data['vote'])
            return JsonResponse({'success': True, 'upvotes': upvotes, 'downvotes': downvotes})
        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})
Пример #4
0
def create_topic_quotes(topic, user, actor, title, source, date, quotes):
    result = []
    user = user or UserFactory()
    first_name, last_name = actor.split()
    actor = PersonActorFactory(first_name=first_name, last_name=last_name)
    source = {
        'actor': actor,
        'source_link': _get_source_link(source, date),
        'timestamp': datetime.datetime.strptime(date, '%Y-%m-%d'),
    }
    for upvotes, downvotes, text, arguments in quotes:
        quote = {
            'text': text,
            'reference_link': '',
        }
        quote = services.create_quote(user, topic, source, quote, _prep_quote_arguments(arguments))
        post = quote.post.first()

        position = 1 if upvotes > downvotes else -1 if upvotes < downvotes else 0
        services.update_user_position(user, post, position)

        result.append(post)

    return result
Пример #5
0
def create_topic_quotes(topic, user, actor, title, source, date, quotes):
    result = []
    user = user or UserFactory()
    first_name, last_name = actor.split()
    actor = PersonActorFactory(first_name=first_name, last_name=last_name)
    source = {
        'actor': actor,
        'source_link': _get_source_link(source, date),
        'timestamp': datetime.datetime.strptime(date, '%Y-%m-%d'),
    }
    for upvotes, downvotes, text, arguments in quotes:
        quote = {
            'text': text,
            'reference_link': '',
        }
        quote = services.create_quote(user, topic, source, quote, _prep_quote_arguments(arguments))
        post = quote.post.first()

        position = 1 if upvotes > downvotes else -1 if upvotes < downvotes else 0
        services.update_user_position(user, post, position)

        result.append(post)

    return result
Пример #6
0
def user_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():
            upvotes, downvotes = services.update_user_position(
                request.user, post, form.cleaned_data['vote'])
            return JsonResponse({
                'success': True,
                'upvotes': upvotes,
                'downvotes': downvotes
            })
        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})
Пример #7
0
def test_get_post_votes(app):
    user = (factories.UserFactory(first_name='u%d' % i) for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_post_votes(post) == (0, 0)
    assert services.update_user_position(next(user), post, 1) == (1, 0)
    assert services.update_user_position(next(user), post, 1) == (2, 0)
    assert services.update_user_position(next(user), post, -1) == (2, 1)
    assert services.get_post_votes(post) == (2, 1)

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

    assert services.get_user_topic_votes(user, post.topic) == {post.pk: 1}
Пример #8
0
def test_get_post_votes(app):
    user = (factories.UserFactory(first_name='u%d' % i)
            for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_post_votes(post) == (0, 0)
    assert services.update_user_position(next(user), post, 1) == (1, 0)
    assert services.update_user_position(next(user), post, 1) == (2, 0)
    assert services.update_user_position(next(user), post, -1) == (2, 1)
    assert services.get_post_votes(post) == (2, 1)

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

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