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:
Edward Langley
2026-04-09 02:49:25 -07:00
parent 001744f5cf
commit 4d7d91257d
13 changed files with 1384 additions and 1409 deletions

View File

@ -4,6 +4,115 @@ use crate::view::AxisEntry;
use super::core::{Cmd, CmdContext};
#[cfg(test)]
mod tests {
use super::*;
use crate::command::cmd::test_helpers::*;
#[test]
fn toggle_group_under_cursor_returns_empty_without_groups() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = ToggleGroupAtCursor { is_row: true };
let effects = cmd.execute(&ctx);
assert!(effects.is_empty());
}
#[test]
fn law_toggle_group_involution() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = ToggleGroupAtCursor { is_row: true };
let first = effects_debug(&cmd.execute(&ctx));
let second = effects_debug(&cmd.execute(&ctx));
assert_eq!(first, second, "Toggle should be structurally consistent");
}
#[test]
fn view_forward_with_empty_stack_shows_status() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = ViewNavigate { forward: true };
let effects = cmd.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("No forward view"),
"Expected status message, got: {dbg}"
);
}
#[test]
fn view_back_with_empty_stack_shows_status() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = ViewNavigate { forward: false };
let effects = cmd.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("No previous view"),
"Expected status message, got: {dbg}"
);
}
#[test]
fn view_forward_with_stack_produces_effect() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let fwd_stack = vec!["View 2".to_string()];
let mut ctx = make_ctx(&m, &layout, &reg);
ctx.view_forward_stack = &fwd_stack;
let cmd = ViewNavigate { forward: true };
let effects = cmd.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("ViewForward"),
"Expected ViewForward, got: {dbg}"
);
}
#[test]
fn view_back_with_stack_produces_apply_and_back() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let back_stack = vec!["Default".to_string()];
let mut ctx = make_ctx(&m, &layout, &reg);
ctx.view_back_stack = &back_stack;
let cmd = ViewNavigate { forward: false };
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("ApplyAndClearDrill"),
"Expected ApplyAndClearDrill, got: {dbg}"
);
assert!(dbg.contains("ViewBack"), "Expected ViewBack, got: {dbg}");
}
#[test]
fn toggle_prune_empty_produces_toggle_and_dirty() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let effects = TogglePruneEmpty.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("TogglePruneEmpty"),
"Expected TogglePruneEmpty, got: {dbg}"
);
}
}
// ── Grid operations ─────────────────────────────────────────────────────
/// Toggle the row or column group collapse under the cursor.