|
1 | 1 | import datetime as dt |
| 2 | +from unittest.mock import patch |
2 | 3 |
|
3 | 4 | from apps.downloads.models import Release, ReleaseFile |
4 | 5 | from apps.downloads.tests.base import BaseDownloadTests |
@@ -232,3 +233,59 @@ def test_update_supernav_skips_os_without_files(self): |
232 | 233 |
|
233 | 234 | # Android (no files) should not be present |
234 | 235 | self.assertNotIn("android", content.lower()) |
| 236 | + |
| 237 | + @patch("apps.downloads.models.update_supernav") |
| 238 | + @patch("apps.downloads.models.update_download_landing_sources_box") |
| 239 | + @patch("apps.downloads.models.update_homepage_download_box") |
| 240 | + def test_release_file_save_triggers_box_updates(self, mock_home, mock_sources, mock_supernav): |
| 241 | + """Saving a ReleaseFile on a published release should update boxes.""" |
| 242 | + mock_supernav.reset_mock() |
| 243 | + mock_sources.reset_mock() |
| 244 | + mock_home.reset_mock() |
| 245 | + |
| 246 | + ReleaseFile.objects.create( |
| 247 | + os=self.windows, |
| 248 | + release=self.python_3, |
| 249 | + name="Windows installer", |
| 250 | + url="/ftp/python/3.10.19/python-3.10.19.exe", |
| 251 | + download_button=True, |
| 252 | + ) |
| 253 | + |
| 254 | + mock_supernav.assert_called() |
| 255 | + mock_sources.assert_called() |
| 256 | + mock_home.assert_called() |
| 257 | + |
| 258 | + @patch("apps.downloads.models.update_supernav") |
| 259 | + @patch("apps.downloads.models.update_download_landing_sources_box") |
| 260 | + @patch("apps.downloads.models.update_homepage_download_box") |
| 261 | + def test_release_file_save_skips_unpublished_release(self, mock_home, mock_sources, mock_supernav): |
| 262 | + """Saving a ReleaseFile on a draft release should not update boxes.""" |
| 263 | + mock_supernav.reset_mock() |
| 264 | + mock_sources.reset_mock() |
| 265 | + mock_home.reset_mock() |
| 266 | + |
| 267 | + ReleaseFile.objects.create( |
| 268 | + os=self.windows, |
| 269 | + release=self.draft_release, |
| 270 | + name="Windows installer draft", |
| 271 | + url="/ftp/python/9.7.2/python-9.7.2.exe", |
| 272 | + ) |
| 273 | + |
| 274 | + mock_supernav.assert_not_called() |
| 275 | + mock_sources.assert_not_called() |
| 276 | + mock_home.assert_not_called() |
| 277 | + |
| 278 | + @patch("apps.downloads.models.update_supernav") |
| 279 | + @patch("apps.downloads.models.update_download_landing_sources_box") |
| 280 | + @patch("apps.downloads.models.update_homepage_download_box") |
| 281 | + def test_release_file_delete_triggers_box_updates(self, mock_home, mock_sources, mock_supernav): |
| 282 | + """Deleting a ReleaseFile on a published release should update boxes.""" |
| 283 | + mock_supernav.reset_mock() |
| 284 | + mock_sources.reset_mock() |
| 285 | + mock_home.reset_mock() |
| 286 | + |
| 287 | + self.release_275_windows_32bit.delete() |
| 288 | + |
| 289 | + mock_supernav.assert_called() |
| 290 | + mock_sources.assert_called() |
| 291 | + mock_home.assert_called() |
0 commit comments