use super::{MAX_TENANT_KEY_LEN, validate_tenant_key};
use crate::tenancy::schema_isolation::tenant_schema_name;
#[test]
fn accepts_alphanumeric_underscore() {
assert!(validate_tenant_key("acme_corp").is_ok());
assert!(validate_tenant_key("Tenant123").is_ok());
}
#[test]
fn rejects_hyphen() {
assert!(validate_tenant_key("acme-corp").is_err());
}
#[test]
fn rejects_other_punctuation_and_spaces() {
assert!(validate_tenant_key("acme.corp").is_err());
assert!(validate_tenant_key("acme corp").is_err());
assert!(validate_tenant_key("acme/corp").is_err());
}
#[test]
fn length_cap_is_56() {
assert_eq!(MAX_TENANT_KEY_LEN, 56, "63 minus len(\"tenant_\")");
assert!(validate_tenant_key(&"a".repeat(56)).is_ok());
assert!(validate_tenant_key(&"a".repeat(57)).is_err());
}
#[test]
fn header_validator_agrees_with_schema_mode() {
let long_ok = "x".repeat(MAX_TENANT_KEY_LEN);
let long_bad = "x".repeat(MAX_TENANT_KEY_LEN + 1);
let accepted = ["acme_corp", "a", "Tenant_42", long_ok.as_str()];
for key in accepted {
assert!(validate_tenant_key(key).is_ok(), "header should accept {key:?}");
assert!(tenant_schema_name(key).is_ok(), "schema-mode should accept {key:?}");
}
let rejected = ["acme-corp", "acme.corp", long_bad.as_str()];
for key in rejected {
assert!(validate_tenant_key(key).is_err(), "header should reject {key:?}");
assert!(tenant_schema_name(key).is_err(), "schema-mode should reject {key:?}");
}
}