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,125 @@ use crate::ui::effect::{self, Effect};
use super::core::{Cmd, CmdContext};
use super::grid::DrillIntoCell;
#[cfg(test)]
mod tests {
use super::*;
use crate::command::cmd::test_helpers::*;
use crate::model::Model;
#[test]
fn enter_edit_mode_produces_editing_mode() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterEditMode {
initial_value: String::new(),
};
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2);
let dbg = format!("{:?}", effects[1]);
assert!(dbg.contains("Editing"), "Expected Editing mode, got: {dbg}");
}
#[test]
fn enter_tile_select_with_categories() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterTileSelect;
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2);
let dbg = format!("{:?}", effects[1]);
assert!(
dbg.contains("TileSelect"),
"Expected TileSelect mode, got: {dbg}"
);
}
#[test]
fn enter_tile_select_no_categories() {
let m = Model::new("Empty");
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterTileSelect;
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2);
}
#[test]
fn enter_export_prompt_sets_mode() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let effects = EnterExportPrompt.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("ExportPrompt"),
"Expected ExportPrompt mode, got: {dbg}"
);
}
#[test]
fn force_quit_always_produces_quit_mode() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let mut ctx = make_ctx(&m, &layout, &reg);
ctx.dirty = true;
let effects = ForceQuit.execute(&ctx);
assert_eq!(effects.len(), 1);
let dbg = effects_debug(&effects);
assert!(dbg.contains("Quit"), "Expected Quit mode, got: {dbg}");
}
#[test]
fn save_and_quit_produces_save_then_quit() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let effects = SaveAndQuit.execute(&ctx);
assert_eq!(effects.len(), 2);
let dbg = effects_debug(&effects);
assert!(dbg.contains("Save"), "Expected Save, got: {dbg}");
assert!(dbg.contains("Quit"), "Expected Quit, got: {dbg}");
}
#[test]
fn edit_or_drill_without_aggregation_enters_edit() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let effects = EditOrDrill.execute(&ctx);
let dbg = effects_debug(&effects);
assert!(dbg.contains("Editing"), "Expected Editing mode, got: {dbg}");
}
#[test]
fn enter_search_mode_sets_flag_and_clears_query() {
let m = two_cat_model();
let layout = make_layout(&m);
let reg = make_registry();
let ctx = make_ctx(&m, &layout, &reg);
let effects = EnterSearchMode.execute(&ctx);
assert_eq!(effects.len(), 2);
let dbg = effects_debug(&effects);
assert!(
dbg.contains("SetSearchMode(true)"),
"Expected search mode on, got: {dbg}"
);
assert!(
dbg.contains("SetSearchQuery"),
"Expected query reset, got: {dbg}"
);
}
}
// ── Mode change commands ─────────────────────────────────────────────────────
#[derive(Debug)]