diff --git a/slhx-derive/tests/compile_fail.rs b/slhx-derive/tests/compile_fail.rs index d0a65be..e284c52 100644 --- a/slhx-derive/tests/compile_fail.rs +++ b/slhx-derive/tests/compile_fail.rs @@ -270,6 +270,60 @@ fn create() -> impl slhx::IntoEffect { ); } +#[test] +fn form_handle_still_requires_generated_param_arguments() { + // req: form/006 req: derive_handler/003 req: test/003 + let fixture = Fixture::new("slhx-derive-form-handler-param-fail"); + fixture.write( + "Cargo.toml", + &format!( + r#"[package] +name = "slhx-derive-form-handler-param-fail" +version = "0.0.0" +edition = "2021" + +[lib] +path = "src/lib.rs" + +[dependencies] +slhx = {{ path = {:?} }} +"#, + repo_path("slhx") + ), + ); + fixture.write( + "build.rs", + r#"fn main() { + let out = std::path::PathBuf::from(std::env::var_os("OUT_DIR").unwrap()); + std::fs::write( + out.join("slhx.syms"), + "slhx-syms-v1\nhandle\ttemplates/app.heml::create\tcreate\t1\nhandle_form\tcreate\tnew_todo\nhandle_param\tcreate\ttodo_id\n", + ) + .unwrap(); +} +"#, + ); + fixture.write( + "src/lib.rs", + r#"struct CreateTodo; + +#[slhx::handler] +fn create(_form: slhx::Form) -> impl slhx::IntoEffect { + slhx::EffectBatch::default() +} +"#, + ); + + let output = check_fixture(&fixture); + + assert!(!output.status.success(), "fixture unexpectedly compiled"); + let stderr = String::from_utf8_lossy(&output.stderr); + assert!( + stderr.contains("slhx handler `create` is missing generated param argument(s): todo_id"), + "missing form-param diagnostic in stderr:\n{stderr}" + ); +} + #[test] fn form_handle_rejects_form_name_suffix_impostor() { // req: form/004 req: form/006 req: test/003