feat(music-lab): music_batch_jobs 테이블 + 장르별 랜덤 풀

This commit is contained in:
2026-05-10 18:52:07 +09:00
parent f074cbec2d
commit f0cb06268e
3 changed files with 268 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
import pytest
from app import db
@pytest.fixture
def fresh_db(monkeypatch, tmp_path):
monkeypatch.setattr(db, "DB_PATH", str(tmp_path / "music.db"))
db.init_db()
return db
def test_create_batch_job(fresh_db):
bid = db.create_batch_job(genre="lo-fi", count=10)
j = db.get_batch_job(bid)
assert j["genre"] == "lo-fi"
assert j["count"] == 10
assert j["status"] == "queued"
assert j["track_ids"] == []
assert j["auto_pipeline"] == 1
assert j["target_duration_sec"] == 180
def test_create_batch_job_no_auto_pipeline(fresh_db):
bid = db.create_batch_job(genre="phonk", count=5, auto_pipeline=False)
j = db.get_batch_job(bid)
assert j["auto_pipeline"] == 0
def test_update_batch_job(fresh_db):
bid = db.create_batch_job(genre="phonk", count=5)
db.update_batch_job(bid, status="generating", current_track_index=2)
j = db.get_batch_job(bid)
assert j["status"] == "generating"
assert j["current_track_index"] == 2
def test_update_batch_rejects_unknown_col(fresh_db):
bid = db.create_batch_job(genre="lo-fi", count=1)
with pytest.raises(ValueError):
db.update_batch_job(bid, evil_col="x")
def test_append_batch_track(fresh_db):
bid = db.create_batch_job(genre="lo-fi", count=3)
db.append_batch_track(bid, 101)
db.append_batch_track(bid, 102)
j = db.get_batch_job(bid)
assert j["track_ids"] == [101, 102]
assert j["completed"] == 2
def test_list_batch_jobs_active_filter(fresh_db):
b1 = db.create_batch_job(genre="lo-fi", count=1)
b2 = db.create_batch_job(genre="phonk", count=1)
db.update_batch_job(b1, status="failed")
actives = db.list_batch_jobs(active_only=True)
assert all(j["status"] not in ("failed",) for j in actives)
assert any(j["id"] == b2 for j in actives)
assert not any(j["id"] == b1 for j in actives)
def test_random_pools_lofi():
from app.random_pools import randomize, POOLS
import random
rng = random.Random(42)
result = randomize("lo-fi", rng)
assert result["bpm"] in range(70, 91)
assert result["key"] in POOLS["lo-fi"]["keys"]
assert result["scale"] in POOLS["lo-fi"]["scales"]
assert len(result["moods"]) == 1
assert result["moods"][0] in POOLS["lo-fi"]["moods"]
assert 3 <= len(result["instruments"]) <= 4
def test_random_pools_phonk():
from app.random_pools import randomize
import random
rng = random.Random(0)
result = randomize("phonk", rng)
assert result["bpm"] in range(130, 161)
assert result["scale"] == "minor"
def test_random_pools_unknown_genre_uses_default():
from app.random_pools import randomize
import random
result = randomize("nonexistent", random.Random(0))
assert result["bpm"] in range(80, 111)
def test_random_pools_seed_reproducible():
from app.random_pools import randomize
import random
a = randomize("lo-fi", random.Random(123))
b = randomize("lo-fi", random.Random(123))
assert a == b