From 6ebfef41b554796d2fe97899faf25799fb890ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Fri, 31 Jul 2015 13:19:24 +0200 Subject: [PATCH] Fix undeclared variable in core.views.random_page I broke it in c5bed3d4 :( Now I'm fixing it and adding tests. Was revealed by pylint. --- readthedocs/core/views.py | 7 +++-- readthedocs/rtd_tests/tests/test_views.py | 35 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/readthedocs/core/views.py b/readthedocs/core/views.py index c6adad76949..faaa5671ba7 100644 --- a/readthedocs/core/views.py +++ b/readthedocs/core/views.py @@ -67,9 +67,12 @@ def get_context_data(self, **kwargs): def random_page(request, project_slug=None): imported_file = ImportedFile.objects.order_by('?') - if project: + if project_slug: imported_file = imported_file.filter(project__slug=project_slug) - url = imported_file.first().get_absolute_url() + imported_file = imported_file.first() + if imported_file is None: + raise Http404 + url = imported_file.get_absolute_url() return HttpResponseRedirect(url) diff --git a/readthedocs/rtd_tests/tests/test_views.py b/readthedocs/rtd_tests/tests/test_views.py index 1bdc7c5842a..17ad73c57e0 100644 --- a/readthedocs/rtd_tests/tests/test_views.py +++ b/readthedocs/rtd_tests/tests/test_views.py @@ -4,6 +4,7 @@ from django.utils.six.moves.urllib.parse import urlsplit from readthedocs.builds.constants import LATEST +from readthedocs.projects.models import ImportedFile from readthedocs.projects.models import Project from readthedocs.projects.forms import UpdateProjectForm @@ -168,3 +169,37 @@ def test_project_redirects(self): def test_project_redirects_delete(self): response = self.client.get('/dashboard/pip/redirects/delete/') self.assertRedirectToLogin(response) + + +class RandomPageTests(TestCase): + fixtures = ['eric', 'test_data'] + + def setUp(self): + self.pip = Project.objects.get(slug='pip') + self.pip_version = self.pip.versions.all()[0] + ImportedFile.objects.create( + project=self.pip, + version=self.pip_version, + name='File', + slug='file', + path='file.html', + md5='abcdef', + commit='1234567890abcdef') + + def test_random_page_view_redirects(self): + response = self.client.get('/random/') + self.assertEqual(response.status_code, 302) + + def test_takes_project_slug(self): + response = self.client.get('/random/pip/') + self.assertEqual(response.status_code, 302) + self.assertTrue('/pip/' in response['Location']) + + def test_404_for_unknown_project(self): + response = self.client.get('/random/not-existent/') + self.assertEqual(response.status_code, 404) + + def test_404_for_with_no_imported_files(self): + ImportedFile.objects.all().delete() + response = self.client.get('/random/pip/') + self.assertEqual(response.status_code, 404)