from __future__ import annotations import unittest from types import SimpleNamespace from biliup_next.app.retry_meta import retry_meta_for_step class RetryMetaTests(unittest.TestCase): def test_retry_meta_uses_schedule_minutes(self) -> None: step = SimpleNamespace( step_name="publish", status="failed_retryable", retry_count=1, started_at=None, finished_at="2099-01-01T00:00:00+00:00", ) payload = retry_meta_for_step(step, {"publish": {"retry_schedule_minutes": [15, 5]}}) self.assertIsNotNone(payload) self.assertEqual(payload["retry_wait_seconds"], 900) self.assertFalse(payload["retry_due"]) def test_retry_meta_marks_exhausted_after_schedule_is_consumed(self) -> None: step = SimpleNamespace( step_name="comment", status="failed_retryable", retry_count=3, started_at=None, finished_at="2026-01-01T00:00:00+00:00", ) payload = retry_meta_for_step(step, {"comment": {"retry_schedule_minutes": [1, 2]}}) self.assertIsNotNone(payload) self.assertTrue(payload["retry_exhausted"]) self.assertIsNone(payload["next_retry_at"]) if __name__ == "__main__": unittest.main()