diff --git a/test/test_update.py b/test/test_update.py index a3d70e9ee6..e4a9575e2e 100644 --- a/test/test_update.py +++ b/test/test_update.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # Allow direct execution +import io import os import sys import unittest @@ -10,6 +11,7 @@ from test.helper import FakeYDL, report_warning from yt_dlp.update import UpdateInfo, Updater +from contextlib import redirect_stderr # XXX: Keep in sync with yt_dlp.update.UPDATE_SOURCES @@ -272,63 +274,70 @@ def test(target, expected, current_version=None, current_commit=None, identifier test('testing', None, current_commit='9' * 40) test('testing', UpdateInfo('testing', commit='9' * 40)) - def test_get_version_info(self): + def test_get_version_info_custom_cases(self): updater = FakeUpdater(FakeYDL(), 'stable') - # CT1 - Tag Already in Required Format + # CT1 – Tag Already in Required Format updater._identifier = 'zip' updater.requested_repo = 'yt-dlp/yt-dlp' - version, commit = updater._get_version_info('2025.04.06', {}) + version, commit = updater._get_version_info('2025.04.06') self.assertEqual(version, '2025.04.06') self.assertIsNone(commit) - # CT2 - Fetch Latest Release Without Commit Hash - tag = 'latest' - updater.requested_repo = 'yt-dlp/yt-dlp' + # CT2 – Fetch Latest Release Without Commit Hash updater._call_api = lambda _: { 'tag_name': 'v2025.04.06', 'name': 'Release 2025.04.06', 'target_commitish': '', 'body': '- Adds support for the new URL parser\n- Fixes bug in simultaneous downloads\n', } - version, commit = updater._get_version_info(tag, updater._call_api(tag)) + version, commit = updater._get_version_info('latest') self.assertEqual(version, 'v2025.04.06') self.assertIsNone(commit) - # CT3 - Fallback to Commit Hash When Tag Is Empty + # CT3 – Fallback to Commit Hash When Tag Is Empty updater._call_api = lambda _: { 'tag_name': 'v2024.02.01', 'name': 'Release candidate', 'target_commitish': 'a1b2c3d4e5f60718293a4b5c6d7e8f9012ab3cd4', 'body': '- Implements extra parameter validation\n- Optimizes performance in date parser\n', } - version, commit = updater._get_version_info('', updater._call_api('')) + version, commit = updater._get_version_info('') self.assertIsNone(version) self.assertEqual(commit, 'a1b2c3d4e5f60718293a4b5c6d7e8f9012ab3cd4') - # CT4 - Extract Version from Name with Empty Tag and Body Hash + # CT4 – Extract Version from Name with Empty Tag and Body Hash updater._call_api = lambda _: { 'tag_name': 'v2024.02.01', 'name': 'Release 2024.02.01', 'target_commitish': '', 'body': 'a1b2c3d4e5f60718293a4b5c6d7e8f9012ab3cd4\n- Implements extra parameter validation\n- Optimizes performance in date parser\n', } - version, commit = updater._get_version_info('', updater._call_api('')) + version, commit = updater._get_version_info('') self.assertEqual(version, '2024.02.01') self.assertIsNone(commit) - # CT5 - Error on Missing Version and Commit Hash + # CT5 – Error on Missing Version and Commit Hash updater._call_api = lambda _: { 'tag_name': 'v2024.02.01', 'name': 'Release candidate', 'target_commitish': '', 'body': '- Implements extra parameter validation\n- Optimizes performance in date parser\n', } - with self.assertLogs(level='WARNING') as cm: - version, commit = updater._get_version_info('', updater._call_api('')) - self.assertIsNone(version) - self.assertIsNone(commit) - self.assertTrue(any('One of either version or commit hash must be available' in m for m in cm.output)) + + # captura de stderr + stderr = io.StringIO() + with redirect_stderr(stderr): + version, commit = updater._get_version_info('') + self.assertIsNone(version) + self.assertIsNone(commit) + + err = stderr.getvalue() + self.assertIn( + "One of either version or commit hash must be available on the release", + err + ) + if __name__ == '__main__': unittest.main()