use super::{ModelColumn, ReadSource, ViewDescriptor};
struct DummyRow;
struct DummyPk;
const COLUMNS: &[ModelColumn] = &[
ModelColumn {
rust_name: "id",
sql_name: "id",
},
ModelColumn {
rust_name: "email",
sql_name: "email",
},
];
const SOURCES: &[&str] = &["Customer", "Order"];
fn descriptor() -> ViewDescriptor<DummyRow, DummyPk> {
ViewDescriptor::new(
"public",
"active_customer",
COLUMNS,
"id",
&["id", "email"],
&["id", "email"],
&[],
&[],
&[],
&[],
false,
SOURCES,
)
}
#[allow(dead_code)]
fn accepts_read_source<S: ReadSource<DummyRow, DummyPk>>(_: &S) {}
#[allow(dead_code)]
fn ref_is_send<T: Send>(_: &T) {}
#[allow(dead_code)]
fn dyn_ref_is_send(d: &'static dyn ReadSource<DummyRow, DummyPk>) {
ref_is_send(&d);
}
#[test]
fn implements_read_source() {
let d = descriptor();
accepts_read_source(&d);
assert_eq!(d.table_name(), "active_customer");
assert_eq!(d.primary_key(), "id");
assert_eq!(d.allowed_includes(), &[] as &[&str]);
assert!(d.soft_delete_column().is_none());
assert_eq!(
d.select_projection(),
"id AS \"id\", email AS \"email\"".to_owned()
);
}
#[test]
fn select_projection_subset_falls_back_to_primary_key() {
let d = descriptor();
assert_eq!(
d.select_projection_subset(&["nope"]),
"id AS \"id\"".to_owned()
);
}