penguinui
This commit is contained in:
@@ -51,6 +51,8 @@ pub(crate) fn render_builder(page: &AddTablePageState) -> String {
|
||||
}
|
||||
|
||||
/// Used when the page itself cannot be loaded (auth or backend failure).
|
||||
/// There is no draft left to render, so this replaces the builder — the dialog
|
||||
/// is what tells the user why the form just emptied.
|
||||
pub(crate) fn render_submission_error(message: &str) -> String {
|
||||
render(&Alert::error("Could not create the table", message))
|
||||
}
|
||||
@@ -145,6 +147,41 @@ mod tests {
|
||||
assert!(html.contains(r#"name="accounting_currency" value="EUR" list="currency-codes""#));
|
||||
}
|
||||
|
||||
/// The dialog only exists when there is a failure, and it carries the same
|
||||
/// message as the inline alert behind it.
|
||||
#[test]
|
||||
fn a_failure_is_shown_as_a_dialog_as_well_as_an_alert() {
|
||||
let mut state = page();
|
||||
assert!(!render_builder(&state).contains(r#"role="dialog""#));
|
||||
|
||||
state.error = Some("That column already exists.".to_string());
|
||||
let html = render_builder(&state);
|
||||
assert!(html.contains(r#"role="dialog""#));
|
||||
assert!(html.contains("x-data=\"{ modalIsOpen: true }\""));
|
||||
assert_eq!(html.matches("That column already exists.").count(), 2);
|
||||
}
|
||||
|
||||
/// The dialog is Tailwind + Alpine, so the page has to load them; the
|
||||
/// `head` block lives two levels up, in `ui/base.html`.
|
||||
#[test]
|
||||
fn the_page_loads_what_the_dialog_needs() {
|
||||
let html = render_page(&page());
|
||||
|
||||
assert!(html.contains("@tailwindcss/browser@4"));
|
||||
assert!(html.contains("@alpinejs/focus@3"));
|
||||
assert!(html.contains("htmx:beforeSwap"));
|
||||
}
|
||||
|
||||
/// A load failure has no draft to render, so the dialog is the response.
|
||||
#[test]
|
||||
fn a_load_failure_answers_with_the_dialog() {
|
||||
let html = render_submission_error("The backend is unreachable.");
|
||||
|
||||
assert!(!html.contains("Template error"), "{html}");
|
||||
assert!(html.contains(r#"role="dialog""#));
|
||||
assert!(html.contains("The backend is unreachable."));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_link_mode_is_shown_on_the_button_that_cycles_it() {
|
||||
let html = render_builder(&page());
|
||||
|
||||
Reference in New Issue
Block a user