Skip to main content

alopex_cli/batch/
mod.rs

1pub mod detector;
2pub mod exit_code;
3
4#[allow(unused_imports)]
5pub use detector::{BatchMode, BatchModeSource};
6#[allow(unused_imports)]
7pub use exit_code::{
8    ClusterManagementOutcome, DistributedReadOutcome, ExitCode, ExitCodeCollector,
9};
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14    use clap::Parser;
15
16    use crate::cli::Cli;
17
18    fn parse_cli(args: &[&str]) -> Cli {
19        Cli::try_parse_from(args).expect("cli parse")
20    }
21
22    #[test]
23    fn detect_batch_mode_sources() {
24        let base = parse_cli(&["alopex", "kv", "list"]);
25        let explicit_cli = parse_cli(&["alopex", "--batch", "kv", "list"]);
26
27        let explicit = BatchMode::detect_with(&explicit_cli, true, Some("batch"));
28        let env = BatchMode::detect_with(&base, true, Some("batch"));
29        let pipe = BatchMode::detect_with(&base, false, None);
30        let default = BatchMode::detect_with(&base, true, None);
31
32        assert_eq!(explicit.source, BatchModeSource::Explicit);
33        assert_eq!(env.source, BatchModeSource::Environment);
34        assert_eq!(pipe.source, BatchModeSource::PipeDetected);
35        assert_eq!(default.source, BatchModeSource::Default);
36    }
37
38    #[test]
39    fn should_prompt_requires_destructive_action() {
40        let cli = parse_cli(&["alopex", "kv", "list"]);
41        let mode = BatchMode {
42            is_batch: false,
43            is_tty: true,
44            source: BatchModeSource::Default,
45        };
46
47        assert!(mode.should_prompt(&cli, true));
48        assert!(!mode.should_prompt(&cli, false));
49    }
50
51    #[test]
52    fn exit_code_collector_reports_warning_on_mixed_results() {
53        let mut collector = ExitCodeCollector::new();
54        collector.record_success();
55        collector.record_error();
56
57        assert_eq!(collector.finalize(), ExitCode::Warning);
58    }
59}