from django.test import TestCase from django.urls import reverse from userprofile.factories import ProfileFactory from rp.factories import ArticleFactory from rp.models import Article class ArticleListTestCase(TestCase): def setUp(self): self.article = ArticleFactory(status='NEW') self.article2 = ArticleFactory(status='NEW') self.user = ProfileFactory().user self.user2 = ProfileFactory().user self.user3 = ProfileFactory().user def test_empty_upvoted(self): self.client.force_login(self.user) response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": "flux" })) assert response.status_code == 200 # Get the context context = response.context assert context["und_votes"]["upvoted"].count() == 0 assert context["und_votes"]["downvoted"].count() == 0 def test_upvoted(self): self.article.upvote(self.user.username) self.client.force_login(self.user) response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": "flux" })) assert list( response.context["und_votes"]["upvoted"]) == [self.article.id] assert list( response.context["und_votes"]["downvoted"]) == [] def test_downvoted(self): self.article.downvote(self.user.username) self.client.force_login(self.user) response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": "flux" })) assert list( response.context["und_votes"]["upvoted"]) == [] assert list( response.context["und_votes"]["downvoted"]) == [self.article.id] def test_2users(self): self.article.downvote(self.user.username) self.article2.upvote(self.user.username) self.article.upvote(self.user2.username) self.client.force_login(self.user) response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": "flux" })) assert list( response.context["und_votes"]["upvoted"]) == [self.article2.id] assert list( response.context["und_votes"]["downvoted"]) == [self.article.id] self.client.force_login(self.user2) response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": "flux" })) assert list( response.context["und_votes"]["upvoted"]) == [self.article.id] assert list( response.context["und_votes"]["downvoted"]) == [] def _test_filter_view(self, filter_view): """Return list of articles ids in filter_view""" response = self.client.get(reverse("rp:article-list", kwargs={ "filter_view": filter_view })) return sorted( response.context["object_list"].values_list('id', flat=True)) def test_filter_view(self): self.article.upvote(self.user.username) self.article.upvote(self.user2.username) self.client.force_login(self.user) assert self._test_filter_view("flux") == sorted( [self.article.pk, self.article2.pk] ) assert self._test_filter_view("published") == [] assert self._test_filter_view("draft") == [] assert self._test_filter_view("rejected") == [] self.article.upvote(self.user3.username) assert self._test_filter_view("flux") == sorted( [self.article.pk, self.article2.pk] ) self.article.save() assert self._test_filter_view("published") == [] assert self._test_filter_view("draft") == [self.article.id] assert self._test_filter_view("rejected") == [] self.article2.reject() self.article2.save() assert self._test_filter_view("published") == [] assert self._test_filter_view("flux") == [] assert self._test_filter_view("draft") == [self.article.id] assert self._test_filter_view("rejected") == [self.article2.id] self.article.publish() self.article.save() assert self._test_filter_view("published") == [self.article.id] assert self._test_filter_view("flux") == [] assert self._test_filter_view("draft") == [] assert self._test_filter_view("rejected") == [self.article2.id]