penguinui
This commit is contained in:
@@ -47,7 +47,8 @@ impl Default for Nav {
|
||||
}
|
||||
}
|
||||
|
||||
/// The swap target every form POST answers with.
|
||||
/// The swap target every form POST answers with. An error carries the dialog
|
||||
/// that puts the message in front of the user; see `ui/alert_fragment.html`.
|
||||
#[derive(Template)]
|
||||
#[template(path = "ui/alert_fragment.html")]
|
||||
pub(crate) struct Alert<'a> {
|
||||
@@ -117,3 +118,24 @@ pub(crate) fn render<T: Template>(template: &T) -> String {
|
||||
.render()
|
||||
.unwrap_or_else(|error| format!("<p class=\"error\">Template error: {error}</p>"))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// Every form on the site answers through `Alert`, so this is the one
|
||||
/// place that decides a failure cannot go unnoticed.
|
||||
#[test]
|
||||
fn a_failed_form_gets_a_dialog_and_a_successful_one_does_not() {
|
||||
let failure = render(&Alert::error("Could not save", "A name is required."));
|
||||
assert!(!failure.contains("Template error"), "{failure}");
|
||||
assert!(failure.contains(r#"role="alert""#));
|
||||
assert!(failure.contains(r#"role="dialog""#));
|
||||
// Once in the inline alert, once in the dialog.
|
||||
assert_eq!(failure.matches("A name is required.").count(), 2);
|
||||
|
||||
let success = render(&Alert::success("Saved", "Two rows written."));
|
||||
assert!(success.contains(r#"role="alert""#));
|
||||
assert!(!success.contains(r#"role="dialog""#));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user