Skip to content

Commit cdbd2f4

Browse files
committed
Refactorise les tests des vues de la bibliothèque
1 parent 5ae4002 commit cdbd2f4

File tree

4 files changed

+147
-182
lines changed

4 files changed

+147
-182
lines changed

zds/tutorialv2/tests/factories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ class PublishedContentFactory(PublishableContentFactory):
242242
"""
243243

244244
@classmethod
245-
def _generate(cls, create, attrs):
245+
def _generate(cls, create, attrs) -> PublishableContent:
246246
# This parameter is only used inside _generate() and won't be saved in the database,
247247
# which is why we use attrs.pop() (it is removed from attrs).
248248
is_major_update = attrs.pop("is_major_update", True)

zds/tutorialv2/tests/tests_lists.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,6 @@ def test_public_lists(self):
6565
article_unpublished = PublishableContentFactory(author_list=[self.user_author], type="ARTICLE")
6666
self.client.logout()
6767

68-
resp = self.client.get(reverse("publication:list") + "?type=tutorial")
69-
self.assertContains(resp, tutorial.title)
70-
self.assertNotContains(resp, tutorial_unpublished.title)
71-
72-
resp = self.client.get(reverse("publication:list") + "?type=article")
73-
self.assertContains(resp, article.title)
74-
self.assertNotContains(resp, article_unpublished.title)
75-
7668
resp = self.client.get(reverse("tutorial:find-tutorial", args=[self.user_author.username]) + "?filter=public")
7769
self.assertContains(resp, tutorial.title)
7870
self.assertNotContains(resp, tutorial_unpublished.title)

zds/tutorialv2/tests/tests_views/tests_published.py

Lines changed: 2 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
PublishedContentFactory,
3636
)
3737
from zds.utils.header_notifications import get_header_notifications
38-
from zds.utils.models import Alert, Hat, Tag
39-
from zds.utils.tests.factories import CategoryFactory, LicenceFactory, SubCategoryFactory
38+
from zds.utils.models import Alert, Hat
39+
from zds.utils.tests.factories import LicenceFactory, SubCategoryFactory
4040

4141
overridden_zds_app = deepcopy(settings.ZDS_APP)
4242
overridden_zds_app["content"]["repo_private_path"] = settings.BASE_DIR / "contents-private-test"
@@ -1599,177 +1599,6 @@ def test_obsolete(self):
15991599
self.assertEqual(result.status_code, 200)
16001600
self.assertNotContains(result, _("Ce contenu est obsolète."))
16011601

1602-
def test_list_publications(self):
1603-
"""Test the behavior of the publication list"""
1604-
1605-
category_1 = CategoryFactory()
1606-
category_2 = CategoryFactory()
1607-
subcategory_1 = SubCategoryFactory(category=category_1)
1608-
subcategory_2 = SubCategoryFactory(category=category_1)
1609-
subcategory_3 = SubCategoryFactory(category=category_2)
1610-
subcategory_4 = SubCategoryFactory(category=category_2)
1611-
tag_1 = Tag(title="random")
1612-
tag_1.save()
1613-
1614-
tuto_p_1 = PublishedContentFactory(author_list=[self.user_author])
1615-
tuto_p_2 = PublishedContentFactory(author_list=[self.user_author])
1616-
tuto_p_3 = PublishedContentFactory(author_list=[self.user_author])
1617-
1618-
article_p_1 = PublishedContentFactory(author_list=[self.user_author], type="ARTICLE")
1619-
1620-
tuto_p_1.subcategory.add(subcategory_1)
1621-
tuto_p_1.subcategory.add(subcategory_2)
1622-
tuto_p_1.save()
1623-
1624-
tuto_p_2.subcategory.add(subcategory_1)
1625-
tuto_p_2.subcategory.add(subcategory_2)
1626-
tuto_p_2.save()
1627-
1628-
tuto_p_3.subcategory.add(subcategory_3)
1629-
tuto_p_3.save()
1630-
1631-
article_p_1.subcategory.add(subcategory_4)
1632-
article_p_1.tags.add(tag_1)
1633-
article_p_1.save()
1634-
1635-
tuto_1 = PublishedContent.objects.get(content=tuto_p_1.pk)
1636-
tuto_2 = PublishedContent.objects.get(content=tuto_p_2.pk)
1637-
tuto_3 = PublishedContent.objects.get(content=tuto_p_3.pk)
1638-
article_1 = PublishedContent.objects.get(content=article_p_1.pk)
1639-
1640-
self.assertEqual(PublishableContent.objects.filter(type="ARTICLE").count(), 1)
1641-
self.assertEqual(PublishableContent.objects.filter(type="TUTORIAL").count(), 4)
1642-
1643-
# 1. Publication list
1644-
result = self.client.get(reverse("publication:list"))
1645-
self.assertEqual(result.status_code, 200)
1646-
1647-
self.assertEqual(len(result.context["last_contents"]), 5)
1648-
1649-
# 2. Category page
1650-
result = self.client.get(reverse("publication:category", kwargs={"slug": category_1.slug}))
1651-
self.assertEqual(result.status_code, 200)
1652-
1653-
self.assertEqual(len(result.context["last_contents"]), 2)
1654-
1655-
pks = [x.pk for x in result.context["last_contents"]]
1656-
self.assertIn(tuto_1.pk, pks)
1657-
self.assertIn(tuto_2.pk, pks)
1658-
1659-
result = self.client.get(reverse("publication:category", kwargs={"slug": category_2.slug}))
1660-
self.assertEqual(result.status_code, 200)
1661-
1662-
self.assertEqual(len(result.context["last_contents"]), 2)
1663-
1664-
pks = [x.pk for x in result.context["last_contents"]]
1665-
self.assertIn(tuto_3.pk, pks)
1666-
self.assertIn(article_1.pk, pks)
1667-
1668-
# 3. Subcategory page
1669-
result = self.client.get(
1670-
reverse("publication:subcategory", kwargs={"slug_category": category_1.slug, "slug": subcategory_1.slug})
1671-
)
1672-
1673-
self.assertEqual(result.status_code, 200)
1674-
1675-
self.assertEqual(len(result.context["last_contents"]), 2)
1676-
1677-
pks = [x.pk for x in result.context["last_contents"]]
1678-
self.assertIn(tuto_1.pk, pks)
1679-
self.assertIn(tuto_2.pk, pks)
1680-
1681-
result = self.client.get(
1682-
reverse("publication:subcategory", kwargs={"slug_category": category_1.slug, "slug": subcategory_2.slug})
1683-
)
1684-
1685-
self.assertEqual(result.status_code, 200)
1686-
1687-
self.assertEqual(len(result.context["last_contents"]), 2)
1688-
1689-
pks = [x.pk for x in result.context["last_contents"]]
1690-
self.assertIn(tuto_1.pk, pks)
1691-
self.assertIn(tuto_2.pk, pks)
1692-
1693-
result = self.client.get(
1694-
reverse("publication:subcategory", kwargs={"slug_category": category_2.slug, "slug": subcategory_3.slug})
1695-
)
1696-
1697-
self.assertEqual(result.status_code, 200)
1698-
1699-
self.assertEqual(len(result.context["last_contents"]), 1)
1700-
1701-
pks = [x.pk for x in result.context["last_contents"]]
1702-
self.assertIn(tuto_3.pk, pks)
1703-
1704-
result = self.client.get(
1705-
reverse("publication:subcategory", kwargs={"slug_category": category_2.slug, "slug": subcategory_4.slug})
1706-
)
1707-
1708-
self.assertEqual(result.status_code, 200)
1709-
1710-
self.assertEqual(len(result.context["last_contents"]), 1)
1711-
1712-
pks = [x.pk for x in result.context["last_contents"]]
1713-
self.assertIn(article_1.pk, pks)
1714-
1715-
# 4. Final page and filters
1716-
result = self.client.get(reverse("publication:list") + f"?category={category_1.slug}")
1717-
self.assertEqual(result.status_code, 200)
1718-
1719-
self.assertEqual(len(result.context["filtered_contents"]), 2)
1720-
pks = [x.pk for x in result.context["filtered_contents"]]
1721-
self.assertIn(tuto_1.pk, pks)
1722-
self.assertIn(tuto_2.pk, pks)
1723-
1724-
# filter by category and type
1725-
result = self.client.get(reverse("publication:list") + f"?category={category_2.slug}")
1726-
self.assertEqual(result.status_code, 200)
1727-
1728-
self.assertEqual(len(result.context["filtered_contents"]), 2)
1729-
pks = [x.pk for x in result.context["filtered_contents"]]
1730-
self.assertIn(tuto_3.pk, pks)
1731-
self.assertIn(article_1.pk, pks)
1732-
1733-
# filter by subcategory
1734-
result = self.client.get(reverse("publication:list") + f"?subcategory={subcategory_1.slug}")
1735-
self.assertEqual(result.status_code, 200)
1736-
1737-
self.assertEqual(len(result.context["filtered_contents"]), 2)
1738-
pks = [x.pk for x in result.context["filtered_contents"]]
1739-
self.assertIn(tuto_1.pk, pks)
1740-
self.assertIn(tuto_2.pk, pks)
1741-
1742-
# filter by subcategory and type
1743-
result = self.client.get(reverse("publication:list") + f"?subcategory={subcategory_3.slug}")
1744-
self.assertEqual(result.status_code, 200)
1745-
1746-
self.assertEqual(len(result.context["filtered_contents"]), 1)
1747-
pks = [x.pk for x in result.context["filtered_contents"]]
1748-
self.assertIn(tuto_3.pk, pks)
1749-
1750-
# filter by tag
1751-
result = self.client.get(reverse("publication:list") + f"?tag={tag_1.slug}" + "&type=article")
1752-
self.assertEqual(result.status_code, 200)
1753-
1754-
self.assertEqual(len(result.context["filtered_contents"]), 1)
1755-
pks = [x.pk for x in result.context["filtered_contents"]]
1756-
self.assertIn(article_1.pk, pks)
1757-
1758-
# 5. Everything else results in 404
1759-
wrong_urls = [
1760-
# not existing (sub)categories, types or tags with slug "xxx"
1761-
reverse("publication:list") + "?category=xxx",
1762-
reverse("publication:list") + "?subcategory=xxx",
1763-
reverse("publication:list") + "?tag=xxx",
1764-
reverse("publication:category", kwargs={"slug": "xxx"}),
1765-
reverse("publication:subcategory", kwargs={"slug_category": category_2.slug, "slug": "xxx"}),
1766-
# subcategory_1 does not belong to category_2:
1767-
reverse("publication:subcategory", kwargs={"slug_category": category_2.slug, "slug": subcategory_1.slug}),
1768-
]
1769-
1770-
for url in wrong_urls:
1771-
self.assertEqual(self.client.get(url).status_code, 404, msg=url)
1772-
17731602
def test_article_previous_link(self):
17741603
"""Test the behaviour of the article previous link."""
17751604

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
from copy import deepcopy
2+
3+
from django.conf import settings
4+
from django.test import TestCase
5+
from django.test.utils import override_settings
6+
from django.urls import reverse
7+
8+
from zds.member.tests.factories import ProfileFactory
9+
from zds.tutorialv2.models.database import PublishableContent
10+
from zds.tutorialv2.tests import TutorialTestMixin
11+
from zds.tutorialv2.tests.factories import PublishableContentFactory, PublishedContentFactory
12+
from zds.utils.models import Tag
13+
from zds.utils.tests.factories import CategoryFactory, SubCategoryFactory
14+
15+
overridden_zds_app = deepcopy(settings.ZDS_APP)
16+
overridden_zds_app["content"]["repo_private_path"] = settings.BASE_DIR / "contents-private-test"
17+
overridden_zds_app["content"]["repo_public_path"] = settings.BASE_DIR / "contents-public-test"
18+
overridden_zds_app["content"]["extra_content_generation_policy"] = "NOTHING"
19+
20+
21+
@override_settings(MEDIA_ROOT=settings.BASE_DIR / "media-test")
22+
@override_settings(ZDS_APP=overridden_zds_app)
23+
@override_settings(SEARCH_ENABLED=False)
24+
class ViewPublicationsTest(TutorialTestMixin, TestCase):
25+
"""Test the library pages."""
26+
27+
def setUp(self):
28+
self.author = ProfileFactory().user
29+
30+
self.category_1 = CategoryFactory()
31+
self.category_2 = CategoryFactory()
32+
self.subcategory_1 = SubCategoryFactory(category=self.category_1)
33+
self.subcategory_2 = SubCategoryFactory(category=self.category_1)
34+
self.subcategory_3 = SubCategoryFactory(category=self.category_2)
35+
self.subcategory_4 = SubCategoryFactory(category=self.category_2)
36+
self.tag_1 = Tag.objects.create(title="random")
37+
38+
# unpublished content
39+
PublishableContentFactory(author_list=[self.author])
40+
41+
tuto_p_1 = PublishedContentFactory(author_list=[self.author])
42+
tuto_p_1.subcategory.add(self.subcategory_1)
43+
tuto_p_1.subcategory.add(self.subcategory_2)
44+
self.tuto_1 = tuto_p_1.public_version
45+
46+
tuto_p_2 = PublishedContentFactory(author_list=[self.author])
47+
tuto_p_2.subcategory.add(self.subcategory_1)
48+
tuto_p_2.subcategory.add(self.subcategory_2)
49+
self.tuto_2 = tuto_p_2.public_version
50+
51+
tuto_p_3 = PublishedContentFactory(author_list=[self.author])
52+
tuto_p_3.subcategory.add(self.subcategory_3)
53+
self.tuto_3 = tuto_p_3.public_version
54+
55+
article_p_1 = PublishedContentFactory(author_list=[self.author], type="ARTICLE")
56+
article_p_1.subcategory.add(self.subcategory_4)
57+
article_p_1.tags.add(self.tag_1)
58+
self.article_1 = article_p_1.public_version
59+
60+
self.assertEqual(PublishableContent.objects.filter(type="ARTICLE").count(), 1)
61+
self.assertEqual(PublishableContent.objects.filter(type="TUTORIAL").count(), 3)
62+
63+
def test_library_main_page(self):
64+
result = self.client.get(reverse("publication:list"))
65+
self.assertEqual(result.status_code, 200)
66+
self.assertQuerySetEqual(
67+
result.context["last_contents"], [self.article_1, self.tuto_3, self.tuto_2, self.tuto_1]
68+
)
69+
70+
def test_category_page_1(self):
71+
result = self.client.get(reverse("publication:category", kwargs={"slug": self.category_1.slug}))
72+
self.assertEqual(result.status_code, 200)
73+
self.assertQuerySetEqual(result.context["last_contents"], [self.tuto_2, self.tuto_1])
74+
75+
def test_category_page_2(self):
76+
result = self.client.get(reverse("publication:category", kwargs={"slug": self.category_2.slug}))
77+
self.assertEqual(result.status_code, 200)
78+
self.assertQuerySetEqual(result.context["last_contents"], [self.article_1, self.tuto_3])
79+
80+
def test_subcategory_1(self):
81+
kwargs = {"slug_category": self.category_1.slug, "slug": self.subcategory_1.slug}
82+
result = self.client.get(reverse("publication:subcategory", kwargs=kwargs))
83+
self.assertEqual(result.status_code, 200)
84+
self.assertQuerySetEqual(result.context["last_contents"], [self.tuto_2, self.tuto_1])
85+
86+
def test_subcategory_2(self):
87+
kwargs = {"slug_category": self.category_1.slug, "slug": self.subcategory_2.slug}
88+
result = self.client.get(reverse("publication:subcategory", kwargs=kwargs))
89+
self.assertEqual(result.status_code, 200)
90+
self.assertQuerySetEqual(result.context["last_contents"], [self.tuto_2, self.tuto_1])
91+
92+
def test_subcategory_3(self):
93+
kwargs = {"slug_category": self.category_2.slug, "slug": self.subcategory_3.slug}
94+
result = self.client.get(reverse("publication:subcategory", kwargs=kwargs))
95+
self.assertEqual(result.status_code, 200)
96+
self.assertQuerySetEqual(result.context["last_contents"], [self.tuto_3])
97+
98+
def test_subcategory_4(self):
99+
kwargs = {"slug_category": self.category_2.slug, "slug": self.subcategory_4.slug}
100+
result = self.client.get(reverse("publication:subcategory", kwargs=kwargs))
101+
self.assertEqual(result.status_code, 200)
102+
self.assertQuerySetEqual(result.context["last_contents"], [self.article_1])
103+
104+
def test_content_list_page_1(self):
105+
result = self.client.get(reverse("publication:list") + f"?category={self.category_1.slug}")
106+
self.assertEqual(result.status_code, 200)
107+
self.assertQuerySetEqual(result.context["filtered_contents"], [self.tuto_2, self.tuto_1])
108+
109+
def test_content_list_page_2(self):
110+
result = self.client.get(reverse("publication:list") + f"?category={self.category_2.slug}")
111+
self.assertEqual(result.status_code, 200)
112+
self.assertQuerySetEqual(result.context["filtered_contents"], [self.article_1, self.tuto_3])
113+
114+
def test_content_list_page_3(self):
115+
result = self.client.get(reverse("publication:list") + f"?subcategory={self.subcategory_1.slug}")
116+
self.assertEqual(result.status_code, 200)
117+
self.assertQuerySetEqual(result.context["filtered_contents"], [self.tuto_2, self.tuto_1])
118+
119+
def test_content_list_page_4(self):
120+
result = self.client.get(reverse("publication:list") + f"?subcategory={self.subcategory_3.slug}")
121+
self.assertEqual(result.status_code, 200)
122+
self.assertQuerySetEqual(result.context["filtered_contents"], [self.tuto_3])
123+
124+
def test_content_list_page_(self):
125+
result = self.client.get(reverse("publication:list") + f"?tag={self.tag_1.slug}")
126+
self.assertEqual(result.status_code, 200)
127+
self.assertQuerySetEqual(result.context["filtered_contents"], [self.article_1])
128+
129+
def test_wrong_urls(self):
130+
# not existing (sub)categories and tags with slug not existing
131+
wrong_urls = [
132+
reverse("publication:list") + "?category=xxx",
133+
reverse("publication:list") + "?subcategory=xxx",
134+
reverse("publication:list") + "?tag=xxx",
135+
reverse("publication:category", kwargs={"slug": "xxx"}),
136+
reverse("publication:subcategory", kwargs={"slug_category": self.category_2.slug, "slug": "xxx"}),
137+
# subcategory_1 does not belong to category_2:
138+
reverse(
139+
"publication:subcategory",
140+
kwargs={"slug_category": self.category_2.slug, "slug": self.subcategory_1.slug},
141+
),
142+
]
143+
for url in wrong_urls:
144+
self.assertEqual(self.client.get(url).status_code, 404, msg=url)

0 commit comments

Comments
 (0)