e9c717844d
Import scoped generated modules at the page boundary so handlers and tests read as local slots/forms/handles/classes without hiding ownership or adding framework machinery. req: component/003 req: dx/006
77 lines
2.3 KiB
Rust
77 lines
2.3 KiB
Rust
#[slhx::surface]
|
|
pub mod ui {}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::ui::control_center::{forms, handles, slots};
|
|
use super::ui::issue_card::handles as card_handles;
|
|
use super::ui::issue_lane::events as lane_events;
|
|
use hemplate::Hemplate;
|
|
use slhx::{Effect, IntoEffect, Payload, RenderSlotExt};
|
|
use slhx_test::inspect;
|
|
|
|
#[derive(Hemplate)]
|
|
#[hemplate = "partials"]
|
|
struct FastMetric {
|
|
label: &'static str,
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(Clone, Debug)]
|
|
#[slhx::form("launch_work")]
|
|
struct LaunchWork {
|
|
title: String,
|
|
lane: String,
|
|
impact: Option<u8>,
|
|
}
|
|
|
|
// req: examples/001 req: codegen/002 req: public_api/001
|
|
#[test]
|
|
fn techdemo_uses_generated_slots_for_multi_target_updates() {
|
|
fn update() -> impl IntoEffect {
|
|
(
|
|
slots::hero_metrics.render(&FastMetric { label: "fast" }),
|
|
slots::notice.text("typed"),
|
|
)
|
|
}
|
|
|
|
let batch = inspect(update());
|
|
assert!(batch.has_slot(slots::hero_metrics));
|
|
assert!(batch.has_slot(slots::notice));
|
|
}
|
|
|
|
// req: examples/001 req: form/001 req: form/004 req: form/006 req: derive_handler/003
|
|
#[test]
|
|
fn techdemo_form_handler_is_checked_against_hemplate_form() {
|
|
#[slhx::handler]
|
|
fn launch_work(_form: slhx::Form<LaunchWork>) -> impl IntoEffect {
|
|
slots::notice.text("queued")
|
|
}
|
|
|
|
let batch = inspect(launch_work(LaunchWork::FORM));
|
|
|
|
assert!(batch.has_slot(slots::notice));
|
|
assert!(matches!(batch.ops(), [Effect::Put { payload: Payload::Text(_), .. }]));
|
|
}
|
|
|
|
// req: examples/001 req: form/002 req: codegen/003
|
|
#[test]
|
|
fn techdemo_exports_form_and_interaction_handles() {
|
|
assert_ne!(handles::launch_work.id(), card_handles::advance_work.id());
|
|
assert_eq!(
|
|
forms::launch_work.field("title").resource,
|
|
forms::launch_work.id()
|
|
);
|
|
}
|
|
|
|
// req: codegen/006
|
|
#[test]
|
|
fn techdemo_exports_generated_event_constants() {
|
|
assert_eq!(lane_events::drop.as_str(), "drop");
|
|
assert!(matches!(
|
|
slhx::event(lane_events::drop, "card-1"),
|
|
Effect::Emit { name, payload } if name == "drop" && payload == "card-1"
|
|
));
|
|
}
|
|
}
|