mod common;
#[test]
fn snapshot_loads_with_the_expected_shape() {
let spec = common::load();
assert_eq!(
spec.snapshot_version, "1",
"snapshot schema version changed"
);
assert_eq!(spec.bot_api_version, "10.2");
assert_eq!(spec.types.len(), 388, "spec type count");
assert_eq!(spec.methods.len(), 185, "spec method count");
assert_eq!(spec.discriminants.len(), 168, "discriminant count");
assert_eq!(spec.unions.len(), 26, "union count");
}
#[test]
fn snapshot_carries_field_level_detail() {
let spec = common::load();
let message = spec.types.get("Message").expect("Message in spec");
assert!(
message.len() > 100,
"Message should have 100+ fields, found {}",
message.len()
);
assert!(!message["message_id"].optional(), "message_id is required");
assert!(message["text"].optional(), "text is optional");
let send_message = spec
.methods
.get("sendMessage")
.expect("sendMessage in spec");
assert!(!send_message["chat_id"].optional());
assert!(send_message["parse_mode"].optional());
assert_eq!(spec.discriminants["RichBlockSectionHeading"], "heading");
assert_eq!(spec.discriminants["PaidMediaPhoto"], "photo");
assert!(spec.unions["PaidMedia"].contains(&"PaidMediaVideo".to_owned()));
let invited = &spec.types["VideoChatParticipantsInvited"]["users"];
assert_eq!(invited.kind(), "Array of User");
assert_eq!(invited.base_type(), "User");
}
#[test]
fn snapshot_version_matches_what_the_crate_claims() {
let spec = common::load();
let readme = include_str!("../../../README.md");
let claimed = readme
.lines()
.find_map(|l| l.strip_prefix("**Supported Bot API version:**"))
.and_then(|rest| rest.split_whitespace().next())
.expect("README states a supported Bot API version");
assert_eq!(
claimed, spec.bot_api_version,
"the README claims Bot API {claimed} but the spec snapshot is {}. \
Regenerate the snapshot after a version bump, or the conformance tests \
validate against the wrong spec.",
spec.bot_api_version
);
}