use toasty::stmt::List;
use topcoat::context::Cx;
use super::*;
use crate::{Resource, ResourceDef, lens, test_support::User};
struct UserResource;
impl Resource for UserResource {
type Model = User;
type Form = crate::NoForm<Self::Model>;
fn declare() -> ResourceDef<Self> {
ResourceDef::new().table(crate::table::Table::new(crate::table::TextColumn::new(
lens!(User.name),
)))
}
fn query(_cx: &Cx) -> toasty::stmt::Query<List<User>> {
toasty::stmt::Query::<List<User>>::all().filter(User::fields().name().eq("Ada"))
}
}
#[test]
fn the_default_entry_is_the_plural_label_at_the_list() {
let item = crate::resource::Mounted::new(UserResource::declare(), "/backoffice").navigation;
assert_eq!(item.label, "Users");
assert_eq!(item.url(), Some("/backoffice/users"));
assert_eq!(item.order, 0);
assert!(item.icon.is_none());
}
#[test]
fn derived_targets_resolve_against_the_owning_panel() {
let derived = NavigationItem {
label: "Users".to_string(),
..NavigationItem::default()
};
let resolved = derived.clone().resolved("/backoffice/users");
assert_eq!(resolved.url(), Some("/backoffice/users"));
assert_eq!(resolved.label, "Users");
assert_eq!(
NavigationItem {
order: -1,
..derived.clone()
}
.resolved("/backoffice/users")
.order,
-1
);
assert_eq!(
resolved.clone().resolved("/elsewhere/users").url(),
Some("/backoffice/users")
);
for url in [
"/admin/users",
"/admin/posts?f.status=draft",
"/backoffice/users/drafts",
"/reports/users",
] {
let spelled_out = NavigationItem::at("Users", url);
assert_eq!(
spelled_out.resolved("/backoffice/users").url(),
Some(url),
"explicit URL must survive resolution"
);
}
}
#[test]
fn slugs_follow_the_filament_convention() {
let mounted = crate::resource::Mounted::new(UserResource::declare(), "/admin");
assert_eq!(mounted.slug, "users");
assert_eq!(mounted.plural_label, "Users");
}
#[test]
fn navigation_item_is_current_path() {
let users = NavigationItem::at("Users", "/admin/users");
let showcase = NavigationItem::at("Showcase", "/admin/showcase");
assert!(users.is_current_path("/admin/users"));
assert!(showcase.is_current_path("/admin/showcase"));
assert!(users.is_current_path("/admin/users/create"));
assert!(showcase.is_current_path("/admin/showcase/table"));
assert!(!users.is_current_path("/admin/userships"));
assert!(!showcase.is_current_path("/admin/showcases"));
assert!(!showcase.is_current_path("/admin/showcase-table"));
assert!(!users.is_current_path("/other"));
assert!(!showcase.is_current_path("/admin/users"));
}