pub mod common; use std::path::PathBuf; use common::BufferUi; use cuddle_release::command::Command; use tracing_test::traced_test; fn get_base_args<'a>() -> Vec<&'a str> { vec!["cuddle-please", "config", "list"] } fn assert_output(ui: &BufferUi, expected_stdout: &str, expected_stderr: &str) { let (stdout, stderr) = ui.get_output(); assert_eq!(expected_stdout, &stdout); assert_eq!(expected_stderr, &stderr); } fn get_test_data_path(item: &str) -> PathBuf { std::env::current_dir() .ok() .map(|p| p.join("testdata").join(item)) .unwrap() } #[test] #[traced_test] fn test_config_from_current_dir() { let args = get_base_args(); let ui = &BufferUi::default(); let current_dir = get_test_data_path("cuddle-embed"); Command::new_from_args(Some(ui), args.into_iter()) .execute(Some(¤t_dir)) .unwrap(); assert_output(ui, "cuddle-config\n", ""); } #[test] #[traced_test] fn test_config_from_source_dir() { let mut args = get_base_args(); let ui = &BufferUi::default(); let current_dir = get_test_data_path("cuddle-embed"); args.push("--source"); args.push(current_dir.to_str().unwrap()); Command::new_from_args(Some(ui), args.into_iter()) .execute(None) .unwrap(); assert_output(ui, "cuddle-config\n", ""); } #[test] #[traced_test] fn test_config_from_stdin() { let mut args = get_base_args(); let ui = &BufferUi::default(); let current_dir = get_test_data_path("cuddle-embed"); args.push("--source"); args.push(current_dir.to_str().unwrap()); args.push("--config-stdin"); Command::new_from_args_with_stdin(Some(ui), args.into_iter(), || Ok("please".into())) .execute(None) .unwrap(); assert_output(ui, "cuddle-config\n", ""); } #[test] #[traced_test] fn test_config_fails_when_not_path_is_set() { let args = get_base_args(); let ui = &BufferUi::default(); let res = Command::new_from_args(Some(ui), args.into_iter()).execute(None); assert!(res.is_err()) }