Files
xiaoxia-saas/tests/unit/test_worker_ingest.py
xiaoxia 250702de59
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m33s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m40s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m43s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m17s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 14m11s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 14m12s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 14m13s
AI Code Review / AI Code Review (pull_request) Failing after 14m13s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 14m15s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Failing after 14m15s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 14m15s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m17s
CI/CD Pipeline / CI Gate (pull_request) Failing after 24s
fix: worker 音频 mime 推断补充 .m4a/.mp3/.wav/.flac/.ogg/.aac/.wma/.amr/.opus/.weba
infer_mime_type_from_storage_key 此前只识别视频后缀,其他一律返回
image/jpeg,导致所有音频文件在 ingest 后被标记为 file_type=image,
配音上传和克隆音色上传均失败。

补充音频后缀分支,返回对应 audio/... mime type。
新增 10 个音频单测,共 13 测试全过。
2026-08-29 12:00:52 +08:00

65 lines
2.2 KiB
Python

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "worker"))
from worker_app.core.asset_types import infer_mime_type_from_storage_key
def test_infer_mime_type_treats_mov_as_video():
assert infer_mime_type_from_storage_key("uploads/abc/DBLQ7915.MOV") == "video/quicktime"
def test_infer_mime_type_treats_common_video_extensions_as_video():
for filename in ["clip.mp4", "clip.m4v", "clip.avi", "clip.mkv", "clip.webm"]:
assert infer_mime_type_from_storage_key(f"uploads/abc/{filename}") == "video/mp4"
def test_infer_mime_type_keeps_unknown_files_as_image_placeholder():
assert infer_mime_type_from_storage_key("uploads/abc/photo.jpg") == "image/jpeg"
# ─── Audio extensions ───────────────────────────────────────────────
def test_infer_mime_type_audio_m4a():
assert infer_mime_type_from_storage_key("uploads/abc/voice.m4a") == "audio/mp4"
# case-insensitive
assert infer_mime_type_from_storage_key("uploads/abc/VOICE.M4A") == "audio/mp4"
def test_infer_mime_type_audio_mp3():
assert infer_mime_type_from_storage_key("uploads/abc/song.mp3") == "audio/mpeg"
def test_infer_mime_type_audio_wav():
assert infer_mime_type_from_storage_key("uploads/abc/recording.wav") == "audio/wav"
def test_infer_mime_type_audio_flac():
assert infer_mime_type_from_storage_key("uploads/abc/hifi.flac") == "audio/flac"
def test_infer_mime_type_audio_ogg():
assert infer_mime_type_from_storage_key("uploads/abc/podcast.ogg") == "audio/ogg"
def test_infer_mime_type_audio_aac():
assert infer_mime_type_from_storage_key("uploads/abc/stream.aac") == "audio/aac"
def test_infer_mime_type_audio_wma():
assert infer_mime_type_from_storage_key("uploads/abc/old.wma") == "audio/x-ms-wma"
def test_infer_mime_type_audio_amr():
assert infer_mime_type_from_storage_key("uploads/abc/voice_msg.amr") == "audio/amr"
def test_infer_mime_type_audio_opus():
assert infer_mime_type_from_storage_key("uploads/abc/voip.opus") == "audio/opus"
def test_infer_mime_type_audio_weba():
assert infer_mime_type_from_storage_key("uploads/abc/web_audio.weba") == "audio/webm"