Skip to content

Commit 5df244b

Browse files
committed
Add tests for downloads/latest/python3.x
1 parent c589e2f commit 5df244b

File tree

3 files changed

+65
-12
lines changed

3 files changed

+65
-12
lines changed

downloads/tests/base.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import datetime
1+
import datetime as dt
22

33
from django.test import TestCase
44
from django.utils import timezone
@@ -32,7 +32,7 @@ def setUp(self):
3232
is_latest=True,
3333
is_published=True,
3434
release_page=self.release_275_page,
35-
release_date=timezone.now() - datetime.timedelta(days=-1)
35+
release_date=dt.datetime.fromisoformat("2013-05-15T00:00Z"),
3636
)
3737
self.release_275_windows_32bit = ReleaseFile.objects.create(
3838
os=self.windows,
@@ -102,9 +102,31 @@ def setUp(self):
102102

103103
self.python_3 = Release.objects.create(
104104
version=Release.PYTHON3,
105-
name='Python 3.10',
105+
name="Python 3.10.19",
106106
is_latest=True,
107107
is_published=True,
108108
show_on_download_page=True,
109-
release_page=self.release_275_page
109+
release_page=self.release_275_page,
110+
release_date=dt.datetime.fromisoformat("2025-10-09T00:00Z"),
111+
)
112+
113+
self.python_3_10_18 = Release.objects.create(
114+
version=Release.PYTHON3,
115+
name="Python 3.10.18",
116+
is_published=True,
117+
release_date=dt.datetime.fromisoformat("2025-06-03T00:00Z"),
118+
)
119+
120+
self.python_3_8_20 = Release.objects.create(
121+
version=Release.PYTHON3,
122+
name="Python 3.8.20",
123+
is_published=True,
124+
release_date=dt.datetime.fromisoformat("2024-09-06T00:00Z"),
125+
)
126+
127+
self.python_3_8_19 = Release.objects.create(
128+
version=Release.PYTHON3,
129+
name="Python 3.8.19",
130+
is_published=True,
131+
release_date=dt.datetime.fromisoformat("2024-03-19T00:00Z"),
110132
)

downloads/tests/test_models.py

Lines changed: 22 additions & 4 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

@@ -10,14 +12,14 @@ def test_stringification(self):
1012

1113
def test_published(self):
1214
published_releases = Release.objects.published()
13-
self.assertEqual(len(published_releases), 4)
15+
self.assertEqual(len(published_releases), 7)
1416
self.assertIn(self.release_275, published_releases)
1517
self.assertIn(self.hidden_release, published_releases)
1618
self.assertNotIn(self.draft_release, published_releases)
1719

1820
def test_release(self):
1921
released_versions = Release.objects.released()
20-
self.assertEqual(len(released_versions), 3)
22+
self.assertEqual(len(released_versions), 6)
2123
self.assertIn(self.release_275, released_versions)
2224
self.assertIn(self.hidden_release, released_versions)
2325
self.assertNotIn(self.draft_release, released_versions)
@@ -37,7 +39,7 @@ def test_draft(self):
3739

3840
def test_downloads(self):
3941
downloads = Release.objects.downloads()
40-
self.assertEqual(len(downloads), 2)
42+
self.assertEqual(len(downloads), 5)
4143
self.assertIn(self.release_275, downloads)
4244
self.assertNotIn(self.hidden_release, downloads)
4345
self.assertNotIn(self.draft_release, downloads)
@@ -50,12 +52,28 @@ def test_python2(self):
5052

5153
def test_python3(self):
5254
versions = Release.objects.python3()
53-
self.assertEqual(len(versions), 3)
55+
self.assertEqual(len(versions), 6)
5456
self.assertNotIn(self.release_275, versions)
5557
self.assertNotIn(self.draft_release, versions)
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: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ def test_latest_redirects(self):
6767
response = self.client.get(url)
6868
self.assertRedirects(response, latest_python3.get_absolute_url())
6969

70+
def test_latest_python3x_redirects(self):
71+
url = reverse("download:download_latest_python3x", kwargs={"minor": "10"})
72+
response = self.client.get(url)
73+
self.assertRedirects(response, self.python_3.get_absolute_url())
74+
75+
url = reverse("download:download_latest_python3x", kwargs={"minor": "8"})
76+
response = self.client.get(url)
77+
self.assertRedirects(response, self.python_3_8_20.get_absolute_url())
78+
79+
url = reverse("download:download_latest_python3x", kwargs={"minor": "99"})
80+
response = self.client.get(url)
81+
self.assertRedirects(response, reverse("download:download"))
82+
7083
def test_redirect_page_object_to_release_detail_page(self):
7184
self.release_275.release_page = None
7285
self.release_275.save()
@@ -218,13 +231,13 @@ def test_get_release(self):
218231
self.assertEqual(response.status_code, 200)
219232
content = self.get_json(response)
220233
# 'self.draft_release' won't shown here.
221-
self.assertEqual(len(content), 4)
234+
self.assertEqual(len(content), 7)
222235

223236
# Login to get all releases.
224237
response = self.client.get(url, headers={"authorization": self.Authorization})
225238
self.assertEqual(response.status_code, 200)
226239
content = self.get_json(response)
227-
self.assertEqual(len(content), 5)
240+
self.assertEqual(len(content), 8)
228241
self.assertFalse(content[0]['is_latest'])
229242

230243
def test_post_release(self):
@@ -594,5 +607,5 @@ def test_feed_item_count(self) -> None:
594607
response = self.client.get(self.url)
595608
content = response.content.decode()
596609

597-
# In BaseDownloadTests, we create 5 releases, 4 of which are published, 1 of those published are hidden..
598-
self.assertEqual(content.count("<item>"), 4)
610+
# In BaseDownloadTests, we create 8 releases, 7 of which are published, 1 of those published are hidden..
611+
self.assertEqual(content.count("<item>"), 7)

0 commit comments

Comments
 (0)