From 36227a4efcc17ca110d30a5e1966ea4f17a6207f Mon Sep 17 00:00:00 2001 From: David Fischer Date: Mon, 2 Dec 2019 20:28:04 -0800 Subject: [PATCH] Use cached media availability This change allows us to query the database instead of the file system or remote storage to get whether a verison has a download of a specific type. --- readthedocs/builds/models.py | 7 ++++--- readthedocs/rtd_tests/tests/test_footer.py | 19 ++++++++++--------- readthedocs/rtd_tests/tests/test_version.py | 12 ++++++++++++ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/readthedocs/builds/models.py b/readthedocs/builds/models.py index 3fbc9069cd8..a1fb76e9e8c 100644 --- a/readthedocs/builds/models.py +++ b/readthedocs/builds/models.py @@ -379,17 +379,18 @@ def get_downloads(self, pretty=False): def prettify(k): return k if pretty else k.lower() - if project.has_pdf(self.slug, version_type=self.type): + if self.has_pdf: data[prettify('PDF')] = project.get_production_media_url( 'pdf', self.slug, ) - if project.has_htmlzip(self.slug, version_type=self.type): + + if self.has_htmlzip: data[prettify('HTML')] = project.get_production_media_url( 'htmlzip', self.slug, ) - if project.has_epub(self.slug, version_type=self.type): + if self.has_epub: data[prettify('Epub')] = project.get_production_media_url( 'epub', self.slug, diff --git a/readthedocs/rtd_tests/tests/test_footer.py b/readthedocs/rtd_tests/tests/test_footer.py index 8b84fe17642..7450c43ea90 100644 --- a/readthedocs/rtd_tests/tests/test_footer.py +++ b/readthedocs/rtd_tests/tests/test_footer.py @@ -12,7 +12,6 @@ from readthedocs.builds.models import Version from readthedocs.core.middleware import FooterNoSessionMiddleware from readthedocs.projects.models import Project -from readthedocs.rtd_tests.mocks.paths import fake_paths_by_regex class Testmaker(APITestCase): @@ -74,23 +73,25 @@ def test_footer_uses_version_compare(self): self.assertEqual(r.data['version_compare'], {'MOCKED': True}) def test_pdf_build_mentioned_in_footer(self): - with fake_paths_by_regex(r'\.pdf$'): - response = self.render() + self.latest.has_pdf = True + self.latest.save() + + response = self.render() self.assertIn('pdf', response.data['html']) def test_pdf_not_mentioned_in_footer_when_doesnt_exists(self): - with fake_paths_by_regex(r'\.pdf$', exists=False): - response = self.render() + response = self.render() self.assertNotIn('pdf', response.data['html']) def test_epub_build_mentioned_in_footer(self): - with fake_paths_by_regex(r'\.epub$'): - response = self.render() + self.latest.has_epub = True + self.latest.save() + + response = self.render() self.assertIn('epub', response.data['html']) def test_epub_not_mentioned_in_footer_when_doesnt_exists(self): - with fake_paths_by_regex(r'\.epub$', exists=False): - response = self.render() + response = self.render() self.assertNotIn('epub', response.data['html']) def test_no_session_logged_out(self): diff --git a/readthedocs/rtd_tests/tests/test_version.py b/readthedocs/rtd_tests/tests/test_version.py index d9782c11da6..8094e8beae2 100644 --- a/readthedocs/rtd_tests/tests/test_version.py +++ b/readthedocs/rtd_tests/tests/test_version.py @@ -82,3 +82,15 @@ def test_version_does_not_support_wipe(self): def test_version_supports_wipe(self): self.assertTrue(self.branch_version.supports_wipe) + + def test_get_downloads(self): + self.assertDictEqual(self.branch_version.get_downloads(), {}) + + self.branch_version.has_pdf = True + self.branch_version.has_epub = True + self.branch_version.save() + expected = { + 'epub': '//readthedocs.org/projects/pip/downloads/epub/stable/', + 'pdf': '//readthedocs.org/projects/pip/downloads/pdf/stable/', + } + self.assertDictEqual(self.branch_version.get_downloads(), expected)