Skip to content

Commit a2b0d2d

Browse files
authored
Add tests for download redirects and refactor DownloadLatestPython3 (#2821)
1 parent d19b30f commit a2b0d2d

File tree

4 files changed

+35
-23
lines changed

4 files changed

+35
-23
lines changed

downloads/tests/test_models.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import datetime as dt
2+
13
from ..models import Release, ReleaseFile
24
from .base import BaseDownloadTests
35

@@ -56,6 +58,22 @@ def test_python3(self):
5658
self.assertIn(self.hidden_release, versions)
5759
self.assertIn(self.pre_release, versions)
5860

61+
def test_latest_python3(self):
62+
latest_3 = Release.objects.latest_python3()
63+
self.assertEqual(latest_3, self.python_3)
64+
self.assertNotEqual(latest_3, self.python_3_10_18)
65+
66+
latest_3_10 = Release.objects.latest_python3(minor_version=10)
67+
self.assertEqual(latest_3_10, self.python_3)
68+
self.assertNotEqual(latest_3_10, self.python_3_10_18)
69+
70+
latest_3_8 = Release.objects.latest_python3(minor_version=8)
71+
self.assertEqual(latest_3_8, self.python_3_8_20)
72+
self.assertNotEqual(latest_3_8, self.python_3_8_19)
73+
74+
latest_3_99 = Release.objects.latest_python3(minor_version=99)
75+
self.assertIsNone(latest_3_99)
76+
5977
def test_get_version(self):
6078
self.assertEqual(self.release_275.name, 'Python 2.7.5')
6179
self.assertEqual(self.release_275.get_version(), '2.7.5')

downloads/tests/test_views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,19 @@ def test_latest_redirects(self):
8282
response = self.client.get(url)
8383
self.assertRedirects(response, latest_python3.get_absolute_url())
8484

85+
def test_latest_python3x_redirects(self):
86+
url = reverse("download:download_latest_python3x", kwargs={"minor": "10"})
87+
response = self.client.get(url)
88+
self.assertRedirects(response, self.python_3.get_absolute_url())
89+
90+
url = reverse("download:download_latest_python3x", kwargs={"minor": "8"})
91+
response = self.client.get(url)
92+
self.assertRedirects(response, self.python_3_8_20.get_absolute_url())
93+
94+
url = reverse("download:download_latest_python3x", kwargs={"minor": "99"})
95+
response = self.client.get(url)
96+
self.assertRedirects(response, reverse("download:download"))
97+
8598
def test_redirect_page_object_to_release_detail_page(self):
8699
self.release_275.release_page = None
87100
self.release_275.save()

downloads/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
urlpatterns = [
66
re_path(r'latest/python2/?$', views.DownloadLatestPython2.as_view(), name='download_latest_python2'),
77
re_path(r'latest/python3/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3'),
8-
re_path(r'latest/python3\.(?P<minor>\d+)/?$', views.DownloadLatestPython3x.as_view(), name='download_latest_python3x'),
8+
re_path(r'latest/python3\.(?P<minor>\d+)/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3x'),
99
re_path(r'latest/pymanager/?$', views.DownloadLatestPyManager.as_view(), name='download_latest_pymanager'),
1010
re_path(r'latest/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3'),
1111
path('operating-systems/', views.DownloadFullOSList.as_view(), name='download_full_os_list'),

downloads/views.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,40 +30,21 @@ def get_redirect_url(self, **kwargs):
3030

3131

3232
class DownloadLatestPython3(RedirectView):
33-
""" Redirect to latest Python 3 release """
34-
permanent = False
35-
36-
def get_redirect_url(self, **kwargs):
37-
try:
38-
latest_python3 = Release.objects.latest_python3()
39-
except Release.DoesNotExist:
40-
latest_python3 = None
33+
"""Redirect to latest Python 3 release, optionally for a specific minor"""
4134

42-
if latest_python3:
43-
return latest_python3.get_absolute_url()
44-
else:
45-
return reverse('download')
46-
47-
48-
class DownloadLatestPython3x(RedirectView):
49-
""" Redirect to latest Python 3.x release for a specific minor version """
5035
permanent = False
5136

5237
def get_redirect_url(self, **kwargs):
5338
minor_version = kwargs.get('minor')
54-
if not minor_version:
55-
return reverse('downloads:download')
56-
5739
try:
58-
minor_version_int = int(minor_version)
40+
minor_version_int = int(minor_version) if minor_version else None
5941
latest_release = Release.objects.latest_python3(minor_version_int)
6042
except (ValueError, Release.DoesNotExist):
6143
latest_release = None
6244

6345
if latest_release:
6446
return latest_release.get_absolute_url()
65-
else:
66-
return reverse('downloads:download')
47+
return reverse("downloads:download")
6748

6849

6950
class DownloadLatestPyManager(RedirectView):

0 commit comments

Comments
 (0)