mediaway-avprobe 0.1.2

Media metadata probe CLI (separate from library API; not affiliated with FFmpeg)
#![cfg(test)]
#![allow(
    clippy::unwrap_used,
    clippy::expect_used,
    reason = "test modules may unwrap"
)]

use super::*;

fn sample_report() -> ProbeReport {
    ProbeReport {
        format: FormatSummary {
            format_name: "mp4",
            major_brand: Some("isom".to_owned()),
            duration_seconds: Some(1.5),
            stream_count: 1,
        },
        streams: vec![StreamSummary {
            index: 0,
            codec: CodecKind::H264,
            width: Some(1920),
            height: Some(1080),
            time_base: Rational::new(1, 1000),
            packet_count: 45,
            duration_seconds: Some(1.5),
        }],
    }
}

#[test]
fn text_render_includes_both_sections_when_requested() {
    let report = sample_report();
    let text = render_text(&report, true, true);
    assert!(text.contains("[STREAM]"));
    assert!(text.contains("codec_name=h264"));
    assert!(text.contains("width=1920"));
    assert!(text.contains("[FORMAT]"));
    assert!(text.contains("format_name=mp4"));
    assert!(text.contains("major_brand=isom"));
}

#[test]
fn text_render_omits_streams_section_when_not_requested() {
    let report = sample_report();
    let text = render_text(&report, true, false);
    assert!(!text.contains("[STREAM]"));
    assert!(text.contains("[FORMAT]"));
}

#[test]
fn text_render_omits_format_section_when_not_requested() {
    let report = sample_report();
    let text = render_text(&report, false, true);
    assert!(text.contains("[STREAM]"));
    assert!(!text.contains("[FORMAT]"));
}

#[test]
fn text_render_shows_n_a_for_missing_geometry() {
    let mut report = sample_report();
    report.streams[0].width = None;
    report.streams[0].height = None;
    let text = render_text(&report, false, true);
    assert!(text.contains("width=N/A"));
    assert!(text.contains("height=N/A"));
}

#[test]
fn json_render_is_valid_looking_and_contains_fields() {
    let report = sample_report();
    let json = render_json(&report, true, true);
    assert!(json.contains("\"streams\""));
    assert!(json.contains("\"format\""));
    assert!(json.contains("\"codec_name\": \"h264\""));
    assert!(json.contains("\"format_name\": \"mp4\""));
    assert!(json.contains("\"major_brand\": \"isom\""));
}

#[test]
fn json_render_uses_null_for_missing_optional_fields() {
    let mut report = sample_report();
    report.streams[0].width = None;
    report.format.major_brand = None;
    let json = render_json(&report, true, true);
    assert!(json.contains("\"width\": null"));
    assert!(json.contains("\"major_brand\": null"));
}

#[test]
fn json_render_omits_requested_off_sections() {
    let report = sample_report();
    let json = render_json(&report, false, true);
    assert!(json.contains("\"streams\""));
    assert!(!json.contains("\"format\""));
}