feat: professionalize control plane and standalone delivery

This commit is contained in:
theshy
2026-04-07 10:46:30 +08:00
parent d0cf1fd0df
commit 862db502b0
100 changed files with 8313 additions and 1483 deletions

70
tests/test_task_engine.py Normal file
View File

@ -0,0 +1,70 @@
from __future__ import annotations
import unittest
from types import SimpleNamespace
from biliup_next.app.task_engine import infer_error_step_name, next_runnable_step
from biliup_next.core.models import TaskStep
class TaskEngineTests(unittest.TestCase):
def test_infer_error_step_name_prefers_running_step(self) -> None:
task = SimpleNamespace(status="running")
steps = {
"transcribe": TaskStep(None, "task-1", "transcribe", "running", None, None, 0, None, None),
"song_detect": TaskStep(None, "task-1", "song_detect", "pending", None, None, 0, None, None),
}
self.assertEqual(infer_error_step_name(task, steps), "transcribe")
def test_next_runnable_step_returns_none_while_a_step_is_running(self) -> None:
task = SimpleNamespace(id="task-1", status="running")
steps = {
"transcribe": TaskStep(None, "task-1", "transcribe", "running", None, None, 0, None, None),
"song_detect": TaskStep(None, "task-1", "song_detect", "pending", None, None, 0, None, None),
}
state = {
"settings": {
"comment": {"enabled": True},
"collection": {"enabled": True},
"paths": {},
"publish": {},
}
}
self.assertEqual(next_runnable_step(task, steps, state), (None, None))
def test_next_runnable_step_returns_wait_payload_for_retryable_publish(self) -> None:
task = SimpleNamespace(id="task-1", status="failed_retryable")
steps = {
"publish": TaskStep(
None,
"task-1",
"publish",
"failed_retryable",
"PUBLISH_UPLOAD_FAILED",
"upload failed",
1,
None,
"2099-01-01T00:00:00+00:00",
)
}
state = {
"settings": {
"comment": {"enabled": True},
"collection": {"enabled": True},
"paths": {},
"publish": {"retry_schedule_minutes": [10]},
}
}
step_name, waiting_payload = next_runnable_step(task, steps, state)
self.assertIsNone(step_name)
self.assertIsNotNone(waiting_payload)
self.assertTrue(waiting_payload["waiting_for_retry"])
self.assertEqual(waiting_payload["step"], "publish")
if __name__ == "__main__":
unittest.main()