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
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})
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
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})
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}