`prepare()` de `Component`, `render()` de `Region` y `Template`, y la implementación de `ComponentRender` pasan a ser funciones async. Se actualizan todos los componentes base, helpers, tests y ejemplos.
65 lines
1.8 KiB
Rust
65 lines
1.8 KiB
Rust
use pagetop::prelude::*;
|
|
|
|
#[pagetop::test]
|
|
async fn component_html_renders_static_markup() {
|
|
let mut component = Html::with(|_| {
|
|
html! {
|
|
p { "Test" }
|
|
}
|
|
});
|
|
|
|
let markup = component.render(&mut Context::default()).await;
|
|
assert_eq!(markup.into_string(), "<p>Test</p>");
|
|
}
|
|
|
|
#[pagetop::test]
|
|
async fn component_html_renders_using_context_param() {
|
|
let mut cx = Context::default().with_param("username", "Alice".to_string());
|
|
|
|
let mut component = Html::with(|cx| {
|
|
let name = cx.param::<String>("username").cloned().unwrap_or_default();
|
|
html! {
|
|
span { (name) }
|
|
}
|
|
});
|
|
|
|
let markup = component.render(&mut cx).await;
|
|
assert_eq!(markup.into_string(), "<span>Alice</span>");
|
|
}
|
|
|
|
#[pagetop::test]
|
|
async fn component_html_allows_replacing_render_function() {
|
|
let mut component = Html::with(|_| html! { div { "Original" } });
|
|
|
|
component.alter_fn(|_| html! { div { "Modified" } });
|
|
|
|
let markup = component.render(&mut Context::default()).await;
|
|
assert_eq!(markup.into_string(), "<div>Modified</div>");
|
|
}
|
|
|
|
#[pagetop::test]
|
|
async fn component_html_default_renders_empty_markup() {
|
|
let mut component = Html::default();
|
|
|
|
let markup = component.render(&mut Context::default()).await;
|
|
assert_eq!(markup.into_string(), "");
|
|
}
|
|
|
|
#[pagetop::test]
|
|
async fn component_html_can_access_request_path() {
|
|
let req = web::test::TestRequest::get()
|
|
.uri("/hello/world")
|
|
.to_http_request();
|
|
let mut cx = Context::new(Some(req));
|
|
|
|
let mut component = Html::with(|cx| {
|
|
let path = cx
|
|
.request()
|
|
.map(|r| r.path().to_string())
|
|
.unwrap_or_default();
|
|
html! { span { (path) } }
|
|
});
|
|
|
|
let markup = component.render(&mut cx).await;
|
|
assert_eq!(markup.into_string(), "<span>/hello/world</span>");
|
|
}
|