Skip to content

Commit 12e6c07

Browse files
committed
Hide unbuilt versions in footer flyout
1 parent 1851ed7 commit 12e6c07

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

readthedocs/builds/querysets.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ def _add_user_repos(self, queryset, user):
2424
queryset = user_queryset | queryset
2525
return queryset
2626

27-
def public(self, user=None, project=None, only_active=True, include_hidden=True):
27+
def public(self, user=None, project=None, only_active=True,
28+
include_hidden=True, only_built=False):
2829
queryset = self.filter(privacy_level=constants.PUBLIC)
2930
if user:
3031
queryset = self._add_user_repos(queryset, user)
3132
if project:
3233
queryset = queryset.filter(project=project)
3334
if only_active:
3435
queryset = queryset.filter(active=True)
36+
if only_built:
37+
queryset = queryset.filter(built=True)
3538
if not include_hidden:
3639
queryset = queryset.filter(hidden=False)
3740
return queryset.distinct()

readthedocs/projects/models.py

+1
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,7 @@ def ordered_active_versions(self, **kwargs):
881881
{
882882
'project': self,
883883
'only_active': True,
884+
'only_built': True,
884885
},
885886
)
886887
versions = (

readthedocs/rtd_tests/tests/test_footer.py

+58-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def setUp(self):
2727
privacy_level=PUBLIC,
2828
main_language_project=None,
2929
)
30-
self.pip.versions.update(privacy_level=PUBLIC)
30+
self.pip.versions.update(privacy_level=PUBLIC, built=True)
3131

3232
self.latest = self.pip.versions.get(slug=LATEST)
3333
self.url = (
@@ -224,6 +224,62 @@ def test_hidden_versions(self):
224224
self.assertIn('/en/latest/', response.data['html'])
225225
self.assertNotIn('/en/2.0/', response.data['html'])
226226

227+
def test_built_versions(self):
228+
built_version = get(
229+
Version,
230+
slug='2.0',
231+
active=True,
232+
built=True,
233+
privacy_level=PUBLIC,
234+
project=self.pip,
235+
)
236+
237+
# The built versions appears on the footer
238+
self.url = (
239+
reverse('footer_html') +
240+
f'?project={self.pip.slug}&version={self.latest.slug}&page=index&docroot=/'
241+
)
242+
response = self.render()
243+
self.assertIn('/en/latest/', response.data['html'])
244+
self.assertIn('/en/2.0/', response.data['html'])
245+
246+
# We can access the built version, and it appears on the footer
247+
self.url = (
248+
reverse('footer_html') +
249+
f'?project={self.pip.slug}&version={built_version.slug}&page=index&docroot=/'
250+
)
251+
response = self.render()
252+
self.assertIn('/en/latest/', response.data['html'])
253+
self.assertIn('/en/2.0/', response.data['html'])
254+
255+
def test_not_built_versions(self):
256+
not_built_version = get(
257+
Version,
258+
slug='2.0',
259+
active=True,
260+
built=False,
261+
privacy_level=PUBLIC,
262+
project=self.pip,
263+
)
264+
265+
# The un-built version doesn't appear on the footer
266+
self.url = (
267+
reverse('footer_html') +
268+
f'?project={self.pip.slug}&version={self.latest.slug}&page=index&docroot=/'
269+
)
270+
response = self.render()
271+
self.assertIn('/en/latest/', response.data['html'])
272+
self.assertNotIn('/en/2.0/', response.data['html'])
273+
274+
# We can access the unbuilt version, but it doesn't appear on the footer
275+
self.url = (
276+
reverse('footer_html') +
277+
f'?project={self.pip.slug}&version={not_built_version.slug}&page=index&docroot=/'
278+
)
279+
response = self.render()
280+
self.assertIn('/en/latest/', response.data['html'])
281+
self.assertNotIn('/en/2.0/', response.data['html'])
282+
227283

228284
class TestFooterHTML(BaseTestFooterHTML, TestCase):
229285

@@ -389,6 +445,7 @@ def test_version_queries(self):
389445
identifier=identifier,
390446
type=TAG,
391447
active=True,
448+
built=True,
392449
)
393450

394451
with self.assertNumQueries(self.EXPECTED_QUERIES):

0 commit comments

Comments
 (0)