Skip to content

Commit e022b6d

Browse files
authored
Merge pull request #5894 from stsewd/add-tests-for-querysets
Add tests for version and project querysets
2 parents f198ce0 + bafbebc commit e022b6d

File tree

4 files changed

+434
-3
lines changed

4 files changed

+434
-3
lines changed

readthedocs/projects/querysets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def prefetch_latest_build(self):
9999

100100
# Aliases
101101

102-
def dashboard(self, user=None):
102+
def dashboard(self, user):
103103
"""Get the projects for this user including the latest build."""
104104
return self.for_admin_user(user).prefetch_latest_build()
105105

readthedocs/rtd_tests/tests/test_doc_building.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1484,7 +1484,6 @@ def test_save_environment_json(self, load_config):
14841484
python_env.save_environment_json()
14851485
json_data = json.load(open(python_env.environment_json_path()))
14861486

1487-
14881487
expected_data = {
14891488
'build': {
14901489
'image': 'readthedocs/build:2.0',

readthedocs/rtd_tests/tests/test_project_querysets.py

Lines changed: 176 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
# -*- coding: utf-8 -*-
21
from datetime import timedelta
32

43
import django_dynamic_fixture as fixture
4+
from django_dynamic_fixture import get
55
from django.contrib.auth.models import User
66
from django.test import TestCase
77

88
from readthedocs.projects.models import Feature, Project
9+
from readthedocs.projects.constants import PRIVATE, PUBLIC, PROTECTED
10+
from readthedocs.builds.models import Version
911
from readthedocs.projects.querysets import (
1012
ChildRelatedProjectQuerySet,
1113
ParentRelatedProjectQuerySet,
@@ -14,6 +16,85 @@
1416

1517
class ProjectQuerySetTests(TestCase):
1618

19+
def setUp(self):
20+
self.user = get(User)
21+
self.another_user = get(User)
22+
23+
self.project = get(
24+
Project,
25+
privacy_level=PUBLIC,
26+
users=[self.user],
27+
main_language_project=None,
28+
)
29+
self.project_private = get(
30+
Project,
31+
privacy_level=PRIVATE,
32+
users=[self.user],
33+
main_language_project=None,
34+
)
35+
self.project_protected = get(
36+
Project,
37+
privacy_level=PROTECTED,
38+
users=[self.user],
39+
main_language_project=None,
40+
)
41+
42+
self.another_project = get(
43+
Project,
44+
privacy_level=PUBLIC,
45+
users=[self.another_user],
46+
main_language_project=None,
47+
)
48+
self.another_project_private = get(
49+
Project,
50+
privacy_level=PRIVATE,
51+
users=[self.another_user],
52+
main_language_project=None,
53+
)
54+
self.another_project_protected = get(
55+
Project,
56+
privacy_level=PROTECTED,
57+
users=[self.another_user],
58+
main_language_project=None,
59+
)
60+
61+
self.shared_project = get(
62+
Project,
63+
privacy_level=PUBLIC,
64+
users=[self.user, self.another_user],
65+
main_language_project=None,
66+
)
67+
self.shared_project_private = get(
68+
Project,
69+
privacy_level=PRIVATE,
70+
users=[self.user, self.another_user],
71+
main_language_project=None,
72+
)
73+
self.shared_project_protected = get(
74+
Project,
75+
privacy_level=PROTECTED,
76+
users=[self.user, self.another_user],
77+
main_language_project=None,
78+
)
79+
80+
self.user_projects = {
81+
self.project,
82+
self.project_private,
83+
self.project_protected,
84+
self.shared_project,
85+
self.shared_project_private,
86+
self.shared_project_protected,
87+
}
88+
89+
self.another_user_projects = {
90+
self.another_project,
91+
self.another_project_private,
92+
self.another_project_protected,
93+
self.shared_project,
94+
self.shared_project_private,
95+
self.shared_project_protected,
96+
}
97+
1798
def test_subproject_queryset_attributes(self):
1899
self.assertEqual(ParentRelatedProjectQuerySet.project_field, 'parent')
19100
self.assertTrue(ParentRelatedProjectQuerySet.use_for_related_fields)
@@ -45,6 +126,100 @@ def test_is_active(self):
45126
project = fixture.get(Project, skip=False, users=[user])
46127
self.assertFalse(Project.objects.is_active(project))
47128

129+
def test_dashboard(self):
130+
query = Project.objects.dashboard(user=self.user)
131+
self.assertEqual(query.count(), len(self.user_projects))
132+
self.assertEqual(set(query), self.user_projects)
133+
134+
query = Project.objects.dashboard(user=self.another_user)
135+
self.assertEqual(query.count(), len(self.another_user_projects))
136+
self.assertEqual(set(query), self.another_user_projects)
137+
138+
def test_private(self):
139+
query = Project.objects.private()
140+
projects = {
141+
self.project_private,
142+
self.another_project_private,
143+
self.shared_project_private,
144+
}
145+
self.assertEqual(query.count(), len(projects))
146+
self.assertEqual(set(query), projects)
147+
148+
def test_private_user(self):
149+
query = Project.objects.private(user=self.user)
150+
projects = (
151+
self.user_projects |
152+
{self.another_project_private}
153+
)
154+
self.assertEqual(query.count(), len(projects))
155+
self.assertEqual(set(query), projects)
156+
157+
query = Project.objects.private(user=self.another_user)
158+
projects = (
159+
self.another_user_projects |
160+
{self.project_private}
161+
)
162+
self.assertEqual(query.count(), len(projects))
163+
self.assertEqual(set(query), projects)
164+
165+
def test_public(self):
166+
query = Project.objects.public()
167+
projects = {
168+
self.project,
169+
self.another_project,
170+
self.shared_project,
171+
}
172+
self.assertEqual(query.count(), len(projects))
173+
self.assertEqual(set(query), projects)
174+
175+
def test_public_user(self):
176+
query = Project.objects.public(user=self.user)
177+
projects = (
178+
self.user_projects |
179+
{self.another_project}
180+
)
181+
self.assertEqual(query.count(), len(projects))
182+
self.assertEqual(set(query), projects)
183+
184+
query = Project.objects.public(user=self.another_user)
185+
projects = (
186+
self.another_user_projects |
187+
{self.project}
188+
)
189+
self.assertEqual(query.count(), len(projects))
190+
self.assertEqual(set(query), projects)
191+
192+
193+
def test_protected(self):
194+
query = Project.objects.protected()
195+
projects = {
196+
self.project,
197+
self.project_protected,
198+
self.another_project,
199+
self.another_project_protected,
200+
self.shared_project,
201+
self.shared_project_protected,
202+
}
203+
self.assertEqual(query.count(), len(projects))
204+
self.assertEqual(set(query), projects)
205+
206+
def test_protected_user(self):
207+
query = Project.objects.protected(user=self.user)
208+
projects = (
209+
self.user_projects |
210+
{self.another_project, self.another_project_protected}
211+
)
212+
self.assertEqual(query.count(), len(projects))
213+
self.assertEqual(set(query), projects)
214+
215+
query = Project.objects.protected(user=self.another_user)
216+
projects = (
217+
self.another_user_projects |
218+
{self.project, self.project_protected}
219+
)
220+
self.assertEqual(query.count(), len(projects))
221+
self.assertEqual(set(query), projects)
222+
48223

49224
class FeatureQuerySetTests(TestCase):
50225

0 commit comments

Comments
 (0)