use super::enum_fixture::{root, shared_enums};
#[test]
fn an_enum_column_gets_a_type_that_is_actually_declared() {
let root = root();
assert!(
root.contains("pub status: ProductStatus,"),
"field should use the enum type: {root}"
);
assert!(
root.contains("use super::enums::ProductStatus;"),
"the model must import its enum:\n{root}"
);
let shared = shared_enums();
assert!(
shared.contains("pub enum ProductStatus"),
"ProductStatus is referenced but never declared:\n{shared}"
);
}
#[test]
fn a_required_enum_field_has_a_default_it_can_actually_use() {
let root = root();
assert!(
root.contains("status: Default::default()"),
"expected the default to delegate: {root}"
);
let shared = shared_enums();
assert!(
shared.contains("Default,"),
"ProductStatus must derive Default:\n{shared}"
);
assert!(
shared.contains("#[default]"),
"a variant must be marked #[default]:\n{shared}"
);
}
#[test]
fn a_variant_keeps_the_label_postgres_stores() {
let shared = shared_enums();
assert!(shared.contains("#[sqlx(type_name = \"product_status\")]"));
assert!(shared.contains("#[sqlx(rename = \"archived\")]"));
assert!(shared.contains("#[serde(rename = \"archived\")]"));
}