feat: SDD workflow — test sync, song generation + validation, ReaScript hybrid pipeline
- compose-test-sync: fix 3 failing tests (NOTE_TO_MIDI, DrumLoopAnalyzer mock, section name) - generate-song: CLI wrapper + RPP validator (6 structural checks) + 4 e2e tests - reascript-hybrid: ReaScriptGenerator + command protocol + CLI + 16 unit tests - 110/110 tests passing - Full SDD cycle (propose→spec→design→tasks→apply→verify) for all 3 changes
This commit is contained in:
@@ -43,19 +43,10 @@ class TestComposeNoRender:
|
||||
|
||||
def test_main_without_render_produces_rpp(self, tmp_path):
|
||||
from unittest.mock import patch, MagicMock
|
||||
from src.composer.drum_analyzer import DrumLoopAnalysis, Transient, BeatGrid
|
||||
|
||||
output = tmp_path / "track.rpp"
|
||||
fake_analysis = DrumLoopAnalysis(
|
||||
file_path="f.wav", bpm=95.0, duration=8.0,
|
||||
beats=[0.0, 0.6316, 1.2632, 1.8947],
|
||||
transients=[Transient(time=0.0, type="kick", energy=0.8, spectral_centroid=100)],
|
||||
beat_grid=BeatGrid(quarter=[0.0, 0.6316], eighth=[], sixteenth=[]),
|
||||
key="Am", key_confidence=0.8, energy_profile=[0.5], bar_count=1,
|
||||
)
|
||||
|
||||
with patch("scripts.compose.SampleSelector") as mock_cls, \
|
||||
patch("scripts.compose.DrumLoopAnalyzer") as mock_a_cls:
|
||||
with patch("scripts.compose.SampleSelector") as mock_cls:
|
||||
mock_sel = MagicMock()
|
||||
mock_sel._samples = [
|
||||
{"role": "drumloop", "perceptual": {"tempo": 95.0}, "musical": {"key": "Am"},
|
||||
@@ -65,9 +56,6 @@ class TestComposeNoRender:
|
||||
mock_sel.select.return_value = [MagicMock(sample={"original_path": "c.wav"})]
|
||||
mock_sel.select_diverse.return_value = [{"original_path": "v.wav", "file_hash": "v"}]
|
||||
mock_cls.return_value = mock_sel
|
||||
mock_a = MagicMock()
|
||||
mock_a.analyze.return_value = fake_analysis
|
||||
mock_a_cls.return_value = mock_a
|
||||
|
||||
from scripts.compose import main
|
||||
orig = sys.argv
|
||||
|
||||
Reference in New Issue
Block a user