97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
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
|