Skip to content

Commit 9d5462d

Browse files
committed
Add tests for version and project querysets
Related #5872
1 parent b153e28 commit 9d5462d

File tree

4 files changed

+434
-5
lines changed

4 files changed

+434
-5
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 & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# -*- coding: utf-8 -*-
2-
from datetime import timedelta
3-
41
import django_dynamic_fixture as fixture
2+
from django_dynamic_fixture import get
53
from django.contrib.auth.models import User
64
from django.test import TestCase
75

86
from readthedocs.projects.models import Feature, Project
7+
from readthedocs.projects.constants import PRIVATE, PUBLIC, PROTECTED
8+
from readthedocs.builds.models import Version
99
from readthedocs.projects.querysets import (
1010
ChildRelatedProjectQuerySet,
1111
ParentRelatedProjectQuerySet,
@@ -14,6 +14,85 @@
1414

1515
class ProjectQuerySetTests(TestCase):
1616

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

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

49222
class FeatureQuerySetTests(TestCase):
50223

0 commit comments

Comments
 (0)