// Contract tests for the Tethys downstream audio sanity helper.
//
// Scope: inspect `scripts/manual/run_tethys_downstream_audio_sanity.sh`.
// Targets: downstream UAC host regressions where PipeWire routes audio into a
// broken zero-channel or zero-volume Lesavka sink.
// Why: the helper is manual, but its safety rails still need regression
// coverage so it remains safe to run during hardware recovery.

const SCRIPT: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/scripts/manual/run_tethys_downstream_audio_sanity.sh"
));

#[test]
fn tethys_audio_probe_detects_zero_volume_and_channel_map_regressions() {
    for expected in [
        "LESAVKA_TETHYS_HOST",
        "LESAVKA_TETHYS_AUDIO_REPAIR",
        "LESAVKA_TETHYS_AUDIO_TIMEOUT_SECONDS",
        "run_pactl()",
        "pactl list short sinks",
        "Volume:.* / 0% /",
        "audio.channels=0",
        "channelVolumes",
        "channelMap",
        "WirePlumber has persisted empty Lesavka channelVolumes/channelMap",
    ] {
        assert!(
            SCRIPT.contains(expected),
            "Tethys downstream audio probe missing guard: {expected}"
        );
    }
}

#[test]
fn tethys_audio_probe_keeps_repair_explicit_and_non_sudo_by_default() {
    for expected in [
        "LESAVKA_TETHYS_AUDIO_REPAIR:-0",
        "LESAVKA_TETHYS_AUDIO_RESTART:-0",
        "restart Tethys user audio or replug/rebind",
        "Tethys root-level audio-interface rebind, if the UAC graph is wedged",
        "bInterfaceSubClass",
        "/proc/asound/cards",
        "print_rebind_hint",
        "Tethys full composite re-enumeration, if audio interfaces bind but ALSA creates no PCM",
    ] {
        assert!(
            SCRIPT.contains(expected),
            "Tethys downstream audio probe should make recovery explicit: {expected}"
        );
    }
    assert!(
        !SCRIPT.contains("sudo sh -c") || SCRIPT.contains("echo \"  sudo sh -c"),
        "the helper may print a sudo recovery command but must not run sudo itself"
    );
}
