use super::variant_fixture::shared;
#[test]
fn colliding_variant_labels_get_distinct_identifiers() {
let shared = shared();
let body = shared
.split("pub enum NodeKind {")
.nth(1)
.expect("the enum should be declared")
.split('}')
.next()
.unwrap();
let declared: Vec<&str> = body
.lines()
.map(str::trim)
.filter(|line| line.ends_with(',') && !line.starts_with('#'))
.collect();
let mut sorted = declared.clone();
sorted.sort_unstable();
let before = sorted.len();
sorted.dedup();
assert_eq!(
before,
sorted.len(),
"a variant identifier is declared twice: {declared:?}"
);
assert_eq!(before, 3, "expected one variant per label: {declared:?}");
}
#[test]
fn every_label_keeps_its_own_rename() {
let shared = shared();
for label in ["campaign_type", "campaign-type", "phone-call"] {
assert!(
shared.contains(&format!("#[sqlx(rename = \"{label}\")]")),
"label {label} lost its rename:\n{shared}"
);
}
}
#[test]
fn a_variant_carries_exactly_one_rename_pair() {
let shared = shared();
assert_eq!(shared.matches("#[sqlx(rename =").count(), 3, "{shared}");
assert_eq!(shared.matches("#[serde(rename =").count(), 3, "{shared}");
}