From 626985016d7c6f81057f5b1d1dfdfaec8fb07b1e Mon Sep 17 00:00:00 2001 From: luxcem Date: Sun, 23 Apr 2017 15:16:34 +0200 Subject: [PATCH] update tests for votes --- apps/rp/models/vote.py | 4 +++ apps/rp/tests/test_article.py | 55 +++++++++++++++++++++++++++++++ apps/rp/tests/test_votes_views.py | 39 ++++++++++++++++++++++ apps/rp/views/votes.py | 4 +-- conftest.py | 2 +- 5 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 apps/rp/tests/test_votes_views.py diff --git a/apps/rp/models/vote.py b/apps/rp/models/vote.py index 4e78cb4..b91576b 100644 --- a/apps/rp/models/vote.py +++ b/apps/rp/models/vote.py @@ -62,6 +62,8 @@ class UnDVotedMixin(models.Model): vote.save() diff_score = 1 + self.und_score += diff_score + # Update self score, use update and filter to avoid triggering signals self.__class__.objects.filter(id=self.id).update( und_score=F("und_score") + diff_score) @@ -84,6 +86,7 @@ class UnDVotedMixin(models.Model): vote.save() diff_score = -1 + self.und_score += diff_score # Update self score, use update and filter to avoid triggering signals self.__class__.objects.filter(id=self.id).update( und_score=F("und_score") + diff_score) @@ -91,5 +94,6 @@ class UnDVotedMixin(models.Model): def update_und_score(self): """Reset score to the correct count (should not be necessary)""" score = self.und_votes.aggregate(Sum("score"))["score__sum"] or 0 + self.und_score = score # Update self score, use update and filter to avoid triggering signals self.__class__.objects.filter(id=self.id).update(und_score=score) diff --git a/apps/rp/tests/test_article.py b/apps/rp/tests/test_article.py index 9ac134a..4ce29f9 100644 --- a/apps/rp/tests/test_article.py +++ b/apps/rp/tests/test_article.py @@ -10,3 +10,58 @@ def test_init(): def test_article(): article = ArticleFactory() assert type(article) == Article + + +def test_votes(): + article = ArticleFactory() + + # Upvote + article.upvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == 1 + assert article_db.und_score == 1 + + votes = article_db.und_votes.all() + assert len(votes) == 1 + assert str(votes[0]) == "{}:{}:{}".format( + "test_user", str(article_db), 1) + + # Upvote -> upvote + article.upvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == 0 + assert article_db.und_score == 0 + + # 0 -> downvote + article.downvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == -1 + assert article_db.und_score == -1 + + # Downvote -> Downvote + article.downvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == 0 + assert article_db.und_score == 0 + + # Downvote -> Upvote + article.downvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == -1 + assert article_db.und_score == -1 + + article.upvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == 1 + assert article_db.und_score == 1 + + # Upvote -> Downwote + article.downvote("test_user") + article_db = Article.objects.get(id=article.id) + assert article.und_score == -1 + assert article_db.und_score == -1 + + article.update_und_score() + article_db = Article.objects.get(id=article.id) + assert article.und_score == -1 + assert article_db.und_score == -1 diff --git a/apps/rp/tests/test_votes_views.py b/apps/rp/tests/test_votes_views.py new file mode 100644 index 0000000..0c79827 --- /dev/null +++ b/apps/rp/tests/test_votes_views.py @@ -0,0 +1,39 @@ +from django.urls import reverse +from django.test import TestCase +from django.contrib.contenttypes.models import ContentType + +from userprofile.factories import ProfileFactory +from rp.factories import ArticleFactory +from rp.models import Article + + +class VoteViewTestCase(TestCase): + def setUp(self): + self.article = ArticleFactory() + self.content_type = ContentType.objects.get_for_model( + self.article + ).pk + self.profile = ProfileFactory() + self.user = self.profile.user + self.client.force_login(self.user) + + def test_votes(self): + url_upvote = reverse("und-upvote", kwargs={ + "content_type": self.content_type, + "object_id": self.article.id + }) + + url_downvote = reverse("und-downvote", kwargs={ + "content_type": self.content_type, + "object_id": self.article.id + }) + + response = self.client.get(url_upvote) + assert response.status_code == 200 + article_db = Article.objects.get(id=self.article.id) + assert article_db.und_score == 1 + + response = self.client.get(url_downvote) + assert response.status_code == 200 + article_db = Article.objects.get(id=self.article.id) + assert article_db.und_score == -1 diff --git a/apps/rp/views/votes.py b/apps/rp/views/votes.py index 9a0d329..83affb9 100644 --- a/apps/rp/views/votes.py +++ b/apps/rp/views/votes.py @@ -6,14 +6,14 @@ from django.http import HttpResponse def upvote(request, content_type, object_id): ct = ContentType.objects.get_for_id(content_type) obj = ct.get_object_for_this_type(pk=object_id) - obj.upvote(user=request.user) + obj.upvote(username=request.user.username) return HttpResponse({"success"}) def downvote(request, content_type, object_id): ct = ContentType.objects.get_for_id(content_type) obj = ct.get_object_for_this_type(pk=object_id) - obj.downvote(user=request.user) + obj.downvote(username=request.user.username) return HttpResponse({"success"}) diff --git a/conftest.py b/conftest.py index 3a92cc1..26c30cd 100644 --- a/conftest.py +++ b/conftest.py @@ -6,7 +6,7 @@ import django from django.conf import settings -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") @pytest.fixture(autouse=True) -- GitLab