Skip to content

Commit d64a42c

Browse files
committed
Merge pull request #1514 from rtfd/fix-random-page-view
Fix undeclared variable in core.views.random_page
2 parents d9d0985 + 6ebfef4 commit d64a42c

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

readthedocs/core/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,12 @@ def get_context_data(self, **kwargs):
6767

6868
def random_page(request, project_slug=None):
6969
imported_file = ImportedFile.objects.order_by('?')
70-
if project:
70+
if project_slug:
7171
imported_file = imported_file.filter(project__slug=project_slug)
72-
url = imported_file.first().get_absolute_url()
72+
imported_file = imported_file.first()
73+
if imported_file is None:
74+
raise Http404
75+
url = imported_file.get_absolute_url()
7376
return HttpResponseRedirect(url)
7477

7578

readthedocs/rtd_tests/tests/test_views.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.utils.six.moves.urllib.parse import urlsplit
55

66
from readthedocs.builds.constants import LATEST
7+
from readthedocs.projects.models import ImportedFile
78
from readthedocs.projects.models import Project
89
from readthedocs.projects.forms import UpdateProjectForm
910

@@ -168,3 +169,37 @@ def test_project_redirects(self):
168169
def test_project_redirects_delete(self):
169170
response = self.client.get('/dashboard/pip/redirects/delete/')
170171
self.assertRedirectToLogin(response)
172+
173+
174+
class RandomPageTests(TestCase):
175+
fixtures = ['eric', 'test_data']
176+
177+
def setUp(self):
178+
self.pip = Project.objects.get(slug='pip')
179+
self.pip_version = self.pip.versions.all()[0]
180+
ImportedFile.objects.create(
181+
project=self.pip,
182+
version=self.pip_version,
183+
name='File',
184+
slug='file',
185+
path='file.html',
186+
md5='abcdef',
187+
commit='1234567890abcdef')
188+
189+
def test_random_page_view_redirects(self):
190+
response = self.client.get('/random/')
191+
self.assertEqual(response.status_code, 302)
192+
193+
def test_takes_project_slug(self):
194+
response = self.client.get('/random/pip/')
195+
self.assertEqual(response.status_code, 302)
196+
self.assertTrue('/pip/' in response['Location'])
197+
198+
def test_404_for_unknown_project(self):
199+
response = self.client.get('/random/not-existent/')
200+
self.assertEqual(response.status_code, 404)
201+
202+
def test_404_for_with_no_imported_files(self):
203+
ImportedFile.objects.all().delete()
204+
response = self.client.get('/random/pip/')
205+
self.assertEqual(response.status_code, 404)

0 commit comments

Comments
 (0)