refactor: colocate cmd tests with their modules
Move tests from the monolithic tests.rs into #[cfg(test)] mod tests blocks in each command module. Shared test helpers live in mod.rs::test_helpers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Executed-By: fido
This commit is contained in:
@ -4,6 +4,84 @@ use crate::view::Axis;
|
||||
|
||||
use super::core::{require_args, Cmd, CmdContext};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::command::cmd::test_helpers::*;
|
||||
|
||||
#[test]
|
||||
fn add_category_cmd_produces_add_category_effect() {
|
||||
let m = two_cat_model();
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
let ctx = make_ctx(&m, &layout, ®);
|
||||
let cmd = AddCategoryCmd(vec!["Region".to_string()]);
|
||||
let effects = cmd.execute(&ctx);
|
||||
assert_eq!(effects.len(), 1);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(
|
||||
dbg.contains("AddCategory"),
|
||||
"Expected AddCategory, got: {dbg}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_cell_cmd_parses_coords_correctly() {
|
||||
let m = two_cat_model();
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
let ctx = make_ctx(&m, &layout, ®);
|
||||
let cmd = SetCellCmd(vec![
|
||||
"42".to_string(),
|
||||
"Type/Food".to_string(),
|
||||
"Month/Jan".to_string(),
|
||||
]);
|
||||
let effects = cmd.execute(&ctx);
|
||||
assert_eq!(effects.len(), 1);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(dbg.contains("SetCell"), "Expected SetCell, got: {dbg}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_axis_cmd_recognizes_column_alias() {
|
||||
let m = two_cat_model();
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
let ctx = make_ctx(&m, &layout, ®);
|
||||
let cmd = SetAxisCmd(vec!["Type".to_string(), "col".to_string()]);
|
||||
let effects = cmd.execute(&ctx);
|
||||
assert_eq!(effects.len(), 1);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(dbg.contains("SetAxis"), "Expected SetAxis, got: {dbg}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn write_cmd_without_args_saves() {
|
||||
let m = two_cat_model();
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
let ctx = make_ctx(&m, &layout, ®);
|
||||
let cmd = WriteCmd(vec![]);
|
||||
let effects = cmd.execute(&ctx);
|
||||
assert_eq!(effects.len(), 1);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(dbg.contains("Save"), "Expected Save, got: {dbg}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn write_cmd_with_path_saves_as() {
|
||||
let m = two_cat_model();
|
||||
let layout = make_layout(&m);
|
||||
let reg = make_registry();
|
||||
let ctx = make_ctx(&m, &layout, ®);
|
||||
let cmd = WriteCmd(vec!["/tmp/out.improv".to_string()]);
|
||||
let effects = cmd.execute(&ctx);
|
||||
assert_eq!(effects.len(), 1);
|
||||
let dbg = effects_debug(&effects);
|
||||
assert!(dbg.contains("SaveAs"), "Expected SaveAs, got: {dbg}");
|
||||
}
|
||||
}
|
||||
|
||||
// ── Parseable model-mutation commands ────────────────────────────────────────
|
||||
// These are thin Cmd wrappers around effects, constructible from string args.
|
||||
// They share the same execution path as keymap-dispatched commands.
|
||||
|
||||
Reference in New Issue
Block a user