csusage 0.2.1

Coding agent CLI usage reports (ccusage fork with Claude Science support)
use csusage_test_support::{Fixture, claude_science::create_fixture};

#[test]
fn claude_science_cli_tables_snapshot_production_stdout_and_stderr() {
    let fixture = Fixture::new();
    let _ = fixture.create_dir_all("claude-science");
    create_fixture(fixture.path("claude-science/metadata.db"));

    for kind in ["daily", "monthly", "session"] {
        let output = std::process::Command::new(env!("CARGO_BIN_EXE_csusage"))
            .env_clear()
            .env("HOME", fixture.path("home"))
            .env("USERPROFILE", fixture.path("userprofile"))
            .env("XDG_CONFIG_HOME", fixture.path("xdg-config"))
            .env(
                "CLAUDE_SCIENCE_DB",
                fixture.path("claude-science/metadata.db"),
            )
            .args([
                "claude-science",
                kind,
                "--since",
                "20990101",
                "--until",
                "20990301",
                "--mode",
                "calculate",
                "--offline",
                "--no-color",
                "--timezone",
                "UTC",
            ])
            .output()
            .expect("failed to run ccusage");

        assert!(
            output.status.success(),
            "ccusage claude-science {kind} failed: {}",
            String::from_utf8_lossy(&output.stderr)
        );

        let stdout = String::from_utf8(output.stdout).expect("CLI stdout was not UTF-8");
        let stderr = String::from_utf8(output.stderr).expect("CLI stderr was not UTF-8");
        insta::assert_snapshot!(
            format!("claude_science_cli_{kind}_table"),
            format!("stdout:\n{stdout}\nstderr:\n{stderr}")
        );
    }
}