style: format the whole tree with cargo fmt (stock defaults, #35)
One-time, mechanical reformat — no functional changes. The tree was not rustfmt-clean (~1800 hunks across ~100 files); this brings it to stock `cargo fmt` defaults so a `cargo fmt --check` CI gate can follow. Behaviour-preserving: 2509 pass / 0 fail / 1 ignored (unchanged baseline), clippy clean. A .git-blame-ignore-revs entry follows so `git blame` skips this commit.
This commit is contained in:
+61
-52
@@ -47,8 +47,7 @@ fn tempdir() -> tempfile::TempDir {
|
||||
/// harness — most tests only need to write a script file and
|
||||
/// call `run_replay`.
|
||||
fn open_project_db(data_root: &Path) -> (project::Project, Database) {
|
||||
let project = project::open_or_create(None, Some(data_root))
|
||||
.expect("open_or_create");
|
||||
let project = project::open_or_create(None, Some(data_root)).expect("open_or_create");
|
||||
let db = Database::open_with_persistence(
|
||||
project.db_path(),
|
||||
Persistence::new(project.path().to_path_buf()),
|
||||
@@ -132,9 +131,7 @@ fn replay_three_lines_dispatches_three_commands() {
|
||||
insert into T (1, 'Alice')\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "seed.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "seed.commands").await });
|
||||
assert_completed(&events, 3);
|
||||
|
||||
// The dispatched commands actually mutated state.
|
||||
@@ -167,8 +164,7 @@ fn replay_of_actual_history_log_runs_ok_commands_and_skips_err() {
|
||||
2026-05-24T10:00:03Z|ok|insert into T (id, v) values (1, 'alpha')\n",
|
||||
);
|
||||
|
||||
let events =
|
||||
rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
// Three `ok` records replayed; the `err` record is skipped (not
|
||||
// counted, not a failure).
|
||||
assert_completed(&events, 3);
|
||||
@@ -215,14 +211,21 @@ fn replay_skips_app_lifecycle_commands_silently() {
|
||||
2026-05-24T10:00:13Z|ok|add column T: v (text)\n\
|
||||
2026-05-24T10:00:14Z|ok|insert into T (id, v) values (1, 'alpha')\n",
|
||||
);
|
||||
let events =
|
||||
rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
// Three data/schema commands ran; every app-lifecycle line was
|
||||
// skipped silently (no panic, no abort, no warnings, no quit).
|
||||
match events.last().expect("event") {
|
||||
AppEvent::ReplayCompleted { count, warnings, .. } => {
|
||||
assert_eq!(*count, 3, "only the 3 write commands ran; events: {events:?}");
|
||||
assert!(warnings.is_empty(), "these skips are silent; got {warnings:?}");
|
||||
AppEvent::ReplayCompleted {
|
||||
count, warnings, ..
|
||||
} => {
|
||||
assert_eq!(
|
||||
*count, 3,
|
||||
"only the 3 write commands ran; events: {events:?}"
|
||||
);
|
||||
assert!(
|
||||
warnings.is_empty(),
|
||||
"these skips are silent; got {warnings:?}"
|
||||
);
|
||||
}
|
||||
other => panic!("expected ReplayCompleted, got {other:?}"),
|
||||
}
|
||||
@@ -251,10 +254,11 @@ fn replay_skips_import_with_a_warning() {
|
||||
"2026-05-24T10:00:00Z|ok|create table T with pk id(int)\n\
|
||||
2026-05-24T10:00:01Z|ok|import shared.zip as Imported\n",
|
||||
);
|
||||
let events =
|
||||
rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "history.log").await });
|
||||
match events.last().expect("event") {
|
||||
AppEvent::ReplayCompleted { count, warnings, .. } => {
|
||||
AppEvent::ReplayCompleted {
|
||||
count, warnings, ..
|
||||
} => {
|
||||
assert_eq!(*count, 1, "only the create ran; events: {events:?}");
|
||||
assert!(
|
||||
warnings.iter().any(|w| w.contains("import shared.zip")),
|
||||
@@ -282,9 +286,7 @@ fn replay_skips_blank_lines_and_comments() {
|
||||
\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "seed.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "seed.commands").await });
|
||||
// Only two non-blank, non-comment lines.
|
||||
assert_completed(&events, 2);
|
||||
}
|
||||
@@ -295,9 +297,7 @@ fn replay_empty_file_completes_with_zero_commands() {
|
||||
let (project, db) = open_project_db(data.path());
|
||||
write_script(project.path(), "empty.commands", "");
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "empty.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "empty.commands").await });
|
||||
assert_completed(&events, 0);
|
||||
}
|
||||
|
||||
@@ -311,9 +311,8 @@ fn replay_only_comments_completes_with_zero_commands() {
|
||||
"# just\n# comments\n\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "comments.commands").await
|
||||
});
|
||||
let events =
|
||||
rt().block_on(async { run_replay(&db, project.path(), "comments.commands").await });
|
||||
assert_completed(&events, 0);
|
||||
}
|
||||
|
||||
@@ -350,8 +349,14 @@ fn replay_constraint_failure_shows_real_names_not_placeholders() {
|
||||
// INSERT command — the **real offending value** is shown too (it used
|
||||
// to degrade to the neutral "that value" because `SqlInsert` discarded
|
||||
// its literals).
|
||||
assert!(error.contains("T.email"), "names the real table.column; got: {error}");
|
||||
assert!(error.contains("a@b.com"), "shows the real offending value; got: {error}");
|
||||
assert!(
|
||||
error.contains("T.email"),
|
||||
"names the real table.column; got: {error}"
|
||||
);
|
||||
assert!(
|
||||
error.contains("a@b.com"),
|
||||
"shows the real offending value; got: {error}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -359,9 +364,8 @@ fn replay_missing_file_fails_with_line_number_zero() {
|
||||
let data = tempdir();
|
||||
let (project, db) = open_project_db(data.path());
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "no-such-file.commands").await
|
||||
});
|
||||
let events =
|
||||
rt().block_on(async { run_replay(&db, project.path(), "no-such-file.commands").await });
|
||||
let failed = assert_failed_at(&events, 0);
|
||||
let AppEvent::ReplayFailed { error, .. } = failed else {
|
||||
unreachable!()
|
||||
@@ -387,9 +391,7 @@ fn replay_aborts_on_first_parse_failure_and_reports_line() {
|
||||
insert into T (1, 'should not happen')\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "bad.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "bad.commands").await });
|
||||
let failed = assert_failed_at(&events, 3);
|
||||
let AppEvent::ReplayFailed { error, command, .. } = failed else {
|
||||
unreachable!()
|
||||
@@ -452,9 +454,7 @@ fn replay_rejects_wrong_type_value_in_a_hand_built_script() {
|
||||
insert into T values (1, 'not a number')\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "typed.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "typed.commands").await });
|
||||
let failed = assert_failed_at(&events, 3);
|
||||
let AppEvent::ReplayFailed { error, .. } = failed else {
|
||||
unreachable!()
|
||||
@@ -489,9 +489,7 @@ fn replay_aborts_on_first_runtime_failure_and_reports_line() {
|
||||
insert into T (1)\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "bad.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "bad.commands").await });
|
||||
let _ = assert_failed_at(&events, 2);
|
||||
}
|
||||
|
||||
@@ -504,23 +502,29 @@ fn replay_skips_nested_replay_with_a_warning() {
|
||||
// because the nested file's commands are not reconstructed.
|
||||
let data = tempdir();
|
||||
let (project, db) = open_project_db(data.path());
|
||||
write_script(project.path(), "inner.commands", "create table T with pk id(int)\n");
|
||||
write_script(
|
||||
project.path(),
|
||||
"inner.commands",
|
||||
"create table T with pk id(int)\n",
|
||||
);
|
||||
write_script(
|
||||
project.path(),
|
||||
"outer.commands",
|
||||
"create table U with pk id(int)\nreplay inner.commands\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "outer.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "outer.commands").await });
|
||||
// The outer `create table U` ran; the nested `replay` was
|
||||
// skipped (count 1), with a warning.
|
||||
match events.last().expect("event") {
|
||||
AppEvent::ReplayCompleted { count, warnings, .. } => {
|
||||
AppEvent::ReplayCompleted {
|
||||
count, warnings, ..
|
||||
} => {
|
||||
assert_eq!(*count, 1, "only the outer create ran; events: {events:?}");
|
||||
assert!(
|
||||
warnings.iter().any(|w| w.contains("nested") && w.contains("replay inner.commands")),
|
||||
warnings
|
||||
.iter()
|
||||
.any(|w| w.contains("nested") && w.contains("replay inner.commands")),
|
||||
"expected a nested-replay skip warning; got {warnings:?}",
|
||||
);
|
||||
}
|
||||
@@ -528,7 +532,10 @@ fn replay_skips_nested_replay_with_a_warning() {
|
||||
}
|
||||
// The nested file's table was NOT created (the replay was skipped).
|
||||
let cols = rt().block_on(async { db.query_data("T".to_string(), None, None).await });
|
||||
assert!(cols.is_err(), "inner.commands' table T must not exist (nested replay skipped)");
|
||||
assert!(
|
||||
cols.is_err(),
|
||||
"inner.commands' table T must not exist (nested replay skipped)"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -546,20 +553,22 @@ fn replay_history_log_records_subcommands_only() {
|
||||
"create table T with pk id(int)\nadd column T: name (text)\n",
|
||||
);
|
||||
|
||||
let events = rt().block_on(async {
|
||||
run_replay(&db, project.path(), "seed.commands").await
|
||||
});
|
||||
let events = rt().block_on(async { run_replay(&db, project.path(), "seed.commands").await });
|
||||
assert_completed(&events, 2);
|
||||
|
||||
let history = fs::read_to_string(project.path().join("history.log"))
|
||||
.expect("history.log exists");
|
||||
let history =
|
||||
fs::read_to_string(project.path().join("history.log")).expect("history.log exists");
|
||||
// Per-command entries landed.
|
||||
assert!(
|
||||
history.lines().any(|l| l.contains("create table T with pk id(int)")),
|
||||
history
|
||||
.lines()
|
||||
.any(|l| l.contains("create table T with pk id(int)")),
|
||||
"history.log missing create line:\n{history}"
|
||||
);
|
||||
assert!(
|
||||
history.lines().any(|l| l.contains("add column T: name (text)")),
|
||||
history
|
||||
.lines()
|
||||
.any(|l| l.contains("add column T: name (text)")),
|
||||
"history.log missing add column line:\n{history}"
|
||||
);
|
||||
// The replay invocation itself did NOT land — that's
|
||||
|
||||
Reference in New Issue
Block a user