use super::Client;
fn test_client() -> Client {
Client::builder()
.app_id("test_app_id")
.app_secret("test_app_secret")
.build()
.unwrap()
}
fn count_enabled_client_fields(client: &Client) -> usize {
format!("{client:?}").matches(": true").count()
}
fn count_enabled_catalog_features() -> usize {
[
cfg!(feature = "cardkit"),
cfg!(feature = "auth"),
cfg!(feature = "docs"),
cfg!(feature = "communication"),
cfg!(feature = "hr"),
cfg!(feature = "meeting"),
cfg!(feature = "ai"),
cfg!(feature = "workflow"),
cfg!(feature = "platform"),
cfg!(feature = "application"),
cfg!(feature = "helpdesk"),
cfg!(feature = "mail"),
cfg!(feature = "analytics"),
cfg!(feature = "user"),
cfg!(feature = "security"),
cfg!(feature = "bot"),
]
.into_iter()
.filter(|b| *b)
.count()
}
#[test]
fn catalog_bootstraps_one_client_field_per_enabled_feature() {
let client = test_client();
let field_count = count_enabled_client_fields(&client);
let feature_count = count_enabled_catalog_features();
assert_eq!(
field_count, feature_count,
"Client 业务域字段数必须等于开启的 catalog feature 数(catalog 接线一致)"
);
}
#[test]
fn client_public_field_order_remains_compatible() {
let debug = format!("{:?}", test_client());
let expected = [
"cardkit",
"auth",
"docs",
"communication",
"hr",
"meeting",
"ai",
"workflow",
"platform",
"application",
"helpdesk",
"mail",
"analytics",
"user",
"security",
"bot",
];
let mut previous = 0;
for field in expected {
let marker = format!("{field}: ");
let position = debug
.find(&marker)
.unwrap_or_else(|| panic!("Client Debug 缺少字段 {field}: {debug}"));
assert!(
position >= previous,
"Client 公开字段顺序改变:{field} 出现在前一字段之前;{debug}"
);
previous = position;
}
}