Add integration test for the router withing inside a Seed App
arn-the-long-beard opened this issue · comments
arn-the-long-beard commented
We need to create few integration tests for the very used public apis of the Router.
arn-the-long-beard commented
I have pushed these tests today
#[wasm_bindgen_test]
fn test_router_init() {
add_router!();
let my_router = router();
assert_eq!(my_router.current_route(), Route::NotFound);
let url = Route::Login.to_url();
router().init(url);
assert_eq!(my_router.current_route(), Route::Login);
}
#[wasm_bindgen_test]
fn test_router_and_route_view() {
let my_router: Router<Route> = router();
my_router.navigate_to_new(Route::Login);
let current_view = my_router
.current_route()
.view(&Model {
dashboard: dashboard::Model::default(),
user: None,
})
.to_string();
let login_view = login(&Model {
dashboard: dashboard::Model::default(),
user: None,
})
.to_string();
assert_eq!(current_view, login_view);
}
#[wasm_bindgen_test]
fn test_router_view_and_guard() {
let my_router: Router<Route> = router();
my_router.navigate_to_new(Dashboard(dashboard::Route::Settings));
let current_view = my_router
.current_route()
.view(&Model {
dashboard: dashboard::Model::default(),
user: None,
})
.to_string();
assert_eq!(
current_view,
forbidden(Some(&UserLogged {
name: "".to_string()
}))
.to_string()
);
let test_user = UserLogged {
name: "test_user".to_string(),
};
my_router.navigate_to_new(Dashboard(dashboard::Route::Settings));
let current_view = my_router
.current_route()
.view(&Model {
dashboard: dashboard::Model::default(),
user: Some(test_user),
})
.to_string();
assert_eq!(
current_view,
dashboard::settings(&dashboard::Model::default()).to_string()
);
}
I do not really run the seed app so . I am still looking for a solution for that.
arn-the-long-beard commented
Done today with the latest commit.
Here is how I did :
#[wasm_bindgen_test]
fn test_router_navigation_and_page_init() {
let mut model = Model {
dashboard: dashboard::Model::default(),
admin: admin::Model::default(),
other: other::Model::default(),
user: None,
};
let window = web_sys::window().expect("no global `window` exists");
let document = window.document().expect("should have a document on window");
let body = document.body().expect("document should have a body");
let val = document
.create_element("section")
.expect("should add section");
val.set_id("app");
let app = App::start(val, init, update, view);
let mut orders = OrdersContainer::new(app);
let url = Route::Home.to_url(); // Home is chosen by wasm_pak probably because it does query the base url first from Seed
update(
Msg::UrlChanged(subs::UrlChanged(url)),
&mut model,
&mut orders,
);
assert_eq!(&model.dashboard.stuff, "");
let dashboard_url = Route::Dashboard(dashboard::Route::Settings).to_url();
router().navigate_to_url(dashboard_url.clone());
update(
Msg::UrlChanged(subs::UrlChanged(dashboard_url)),
&mut model,
&mut orders,
);
assert_eq!(&model.dashboard.stuff, "init_has_been_done");
let admin_url: Url = "http://localhost/admin?admin_id=1&admin_privilege=high"
.parse()
.unwrap();
router().navigate_to_url(admin_url.clone());
update(
Msg::UrlChanged(subs::UrlChanged(admin_url)),
&mut model,
&mut orders,
);
assert_eq!(&model.admin.admin_id, "1");
assert_eq!(&model.admin.admin_privilege, "high");
}