import numpy as np from app.services.key_detector import detect_key, MAJOR_PROFILE, MINOR_PROFILE def test_c_major_profile_detects_c_major(): root, mode, conf = detect_key(np.array(MAJOR_PROFILE)) assert root == "C" and mode == "major" and conf > 0.8 def test_a_minor_profile_detects_a_minor(): # Roll minor profile so A (index 9) aligns as root root, mode, conf = detect_key(np.roll(MINOR_PROFILE, 9)) assert root == "A" and mode == "minor" and conf > 0.8 def test_g_major_detects_correctly(): root, mode, _ = detect_key(np.roll(MAJOR_PROFILE, 7)) assert root == "G" and mode == "major" def test_confidence_range(): _, _, conf = detect_key(np.random.rand(12)) assert 0.0 <= conf <= 1.0 def test_returns_valid_note_and_mode(): valid = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"} root, mode, _ = detect_key(np.random.rand(12)) assert root in valid assert mode in {"major", "minor"}