98890b9581
Tests cover curation, Lyria, queue, and API routes. Setting max_new_songs_per_day to 0 disables the limit; generate-batch runs 20 curated multilingual vocal directions. Co-authored-by: Cursor <cursoragent@cursor.com>
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from ozan_radio.curation import (
|
|
curation_summary_for_dj,
|
|
default_curation_block,
|
|
list_curated_tracks,
|
|
)
|
|
|
|
|
|
def test_default_curation_block_shape():
|
|
block = default_curation_block()
|
|
assert block["rating"] == "unrated"
|
|
assert block["public_playlist"] is True
|
|
assert block["shuffle_weight"] == 1.0
|
|
|
|
|
|
def test_list_curated_tracks_sorts_love_first(songs_dir: Path):
|
|
tracks = list_curated_tracks(songs_dir)
|
|
assert len(tracks) == 2
|
|
assert tracks[0]["title"] == "Sahara Test"
|
|
assert tracks[0]["curation"]["rating"] == "love"
|
|
|
|
|
|
def test_curation_summary_includes_loved_and_avoid(songs_dir: Path):
|
|
summary = curation_summary_for_dj(songs_dir)
|
|
assert "Sahara Test [love]" in summary
|
|
assert "saz" in summary
|
|
assert "electric guitar" in summary
|
|
assert "Bad Intro" not in summary # skip-rated omitted from lines
|
|
|
|
|
|
def test_curation_summary_empty_dir(tmp_path: Path):
|
|
empty = tmp_path / "songs"
|
|
empty.mkdir()
|
|
assert curation_summary_for_dj(empty) == "No curated library yet."
|