feat: add generation trace and partial-ready workflow status

This commit is contained in:
2026-04-18 21:53:55 +08:00
parent 96dfc677e2
commit e99a7fbe14
36 changed files with 2597 additions and 144 deletions

View File

@@ -76,7 +76,8 @@ class TestStoryGenerate:
assert "title" in data
assert "story_text" in data
assert data["mode"] == "generated"
assert data["generation_status"] == "narrative_ready"
assert data["generation_status"] == "partial_ready"
assert data["text_status"] == "ready"
assert data["image_status"] == "not_requested"
assert data["audio_status"] == "not_requested"
assert data["last_error"] is None
@@ -101,7 +102,8 @@ class TestStoryList:
assert len(data) == 1
assert data[0]["id"] == test_story.id
assert data[0]["title"] == test_story.title
assert data[0]["generation_status"] == "narrative_ready"
assert data[0]["generation_status"] == "partial_ready"
assert data[0]["text_status"] == "ready"
assert data[0]["image_status"] == "not_requested"
assert data[0]["audio_status"] == "not_requested"
@@ -133,7 +135,8 @@ class TestStoryDetail:
assert data["id"] == test_story.id
assert data["title"] == test_story.title
assert data["story_text"] == test_story.story_text
assert data["generation_status"] == "narrative_ready"
assert data["generation_status"] == "partial_ready"
assert data["text_status"] == "ready"
assert data["image_status"] == "not_requested"
assert data["audio_status"] == "not_requested"
assert data["last_error"] is None
@@ -250,7 +253,7 @@ class TestAudio:
detail_response = auth_client.get(f"/api/stories/{test_story.id}")
detail = detail_response.json()
assert detail["audio_status"] == "ready"
assert detail["generation_status"] == "completed"
assert detail["generation_status"] == "partial_ready"
assert detail["last_error"] is None
def test_get_audio_regenerates_when_cache_file_is_missing(
@@ -335,7 +338,7 @@ class TestGenerateFull:
assert data["image_url"] == "https://example.com/image.png"
assert data["audio_ready"] is False
assert data["errors"] == {}
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "ready"
assert data["audio_status"] == "not_requested"
assert data["last_error"] is None
@@ -412,7 +415,7 @@ class TestUnifiedGenerations:
assert data["image_url"] == "https://example.com/image.png"
assert data["cover_url"] == "https://example.com/image.png"
assert data["pages"] is None
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "ready"
assert data["audio_status"] == "not_requested"
assert data["errors"] == {}
@@ -436,7 +439,7 @@ class TestUnifiedGenerations:
data = response.json()
assert data["mode"] == "generated"
assert data["image_url"] is None
assert data["generation_status"] == "narrative_ready"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "not_requested"
def test_create_story_generation_image_failure(
@@ -530,7 +533,7 @@ class TestUnifiedGenerations:
assert response.status_code == 200
data = response.json()
assert data["image_url"] == "https://example.com/image.png"
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "ready"
@@ -551,7 +554,7 @@ class TestImageGenerateSuccess:
)
data = response.json()
assert data["image_url"] == "https://example.com/image.png"
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "ready"
assert data["audio_status"] == "not_requested"
assert data["last_error"] is None
@@ -578,7 +581,7 @@ class TestAssetRetry:
)
data = response.json()
assert data["image_url"] == "https://example.com/image.png"
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "ready"
assert data["audio_status"] == "not_requested"
assert data["last_error"] is None
@@ -629,7 +632,7 @@ class TestAssetRetry:
assert response.status_code == 200
data = response.json()
assert data["generation_status"] == "completed"
assert data["generation_status"] == "partial_ready"
assert data["image_status"] == "not_requested"
assert data["audio_status"] == "ready"
assert data["last_error"] is None