3d65e92783
Use RenderSlotExt in the kanban library smoke test so even the small public example test path avoids explicit SafeHtml/html plumbing. req: view/001 req: html_safety/002
76 lines
2.4 KiB
Rust
76 lines
2.4 KiB
Rust
#[slhx::surface]
|
|
pub mod ui {}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::ui;
|
|
use hemplate::Hemplate;
|
|
use scraper::{Html, Selector};
|
|
use slhx::{Effect, IntoEffect, Payload, RenderSlotExt};
|
|
use slhx_test::inspect;
|
|
|
|
#[derive(Hemplate)]
|
|
#[hemplate = "partials"]
|
|
struct BoardColumns {
|
|
columns: Vec<String>,
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(Clone, Debug)]
|
|
#[slhx::form("create_card")]
|
|
struct CreateCard {
|
|
title: String,
|
|
column: String,
|
|
}
|
|
|
|
// req: examples/001 req: codegen/002 req: list/003
|
|
#[test]
|
|
fn kanban_board_updates_generated_slot() {
|
|
fn render_board() -> impl IntoEffect {
|
|
ui::board::slots::board.render_view(&empty_board())
|
|
}
|
|
|
|
let effect = inspect(render_board());
|
|
assert!(effect.has_slot(ui::board::slots::board));
|
|
assert!(matches!(effect.ops(), [Effect::Put { payload: Payload::Html(_), .. }]));
|
|
}
|
|
|
|
// req: html_safety/002 req: view/001 req: test/005
|
|
#[test]
|
|
fn kanban_board_test_payload_is_rendered_by_a_hemplate_view() {
|
|
let html = slhx::render_html(&empty_board());
|
|
let document = Html::parse_fragment(html.as_str());
|
|
assert_eq!(document.select(&selector(".columns")).count(), 1);
|
|
}
|
|
|
|
fn empty_board() -> BoardColumns {
|
|
// req: html_safety/002 req: view/001
|
|
BoardColumns { columns: Vec::new() }
|
|
}
|
|
|
|
fn selector(value: &str) -> Selector {
|
|
Selector::parse(value).expect("test selector parses")
|
|
}
|
|
|
|
// req: examples/001 req: form/001 req: form/004 req: form/006 req: derive_handler/003
|
|
#[test]
|
|
fn kanban_form_handler_is_checked_against_hemplate_form() {
|
|
#[slhx::handler]
|
|
fn create_card(_form: slhx::Form<CreateCard>) -> impl IntoEffect {
|
|
ui::board::slots::notice.text("queued")
|
|
}
|
|
|
|
let effect = inspect(create_card(CreateCard::FORM));
|
|
|
|
assert!(effect.has_slot(ui::board::slots::notice));
|
|
assert!(matches!(effect.ops(), [Effect::Put { payload: Payload::Text(_), .. }]));
|
|
}
|
|
|
|
// req: examples/001 req: form/002 req: codegen/003
|
|
#[test]
|
|
fn kanban_template_exports_form_and_card_handles() {
|
|
assert_ne!(ui::board::handles::create_card.id(), ui::board::handles::move_right.id());
|
|
assert_eq!(ui::board::forms::create_card.field("title").resource, ui::board::forms::create_card.id());
|
|
}
|
|
}
|