use super::*;
const VALID_V4: &str = "550e8400-e29b-41d4-a716-446655440000";
const VALID_V4_UPPERCASE: &str = "550E8400-E29B-41D4-A716-446655440000";
const V4_NON_RFC4122_VARIANT: &str = "550e8400-e29b-41d4-0716-446655440000";
const NON_V4_UUIDS: &[&str] = &[
"00000000-0000-0000-0000-000000000000", "a8098c1a-f86e-11da-bd1a-00112444be1e", "6fa459ea-ee8a-3ca4-894e-db77e160355e", "886313e1-3b8a-5372-9b90-0c9aee199e5d", V4_NON_RFC4122_VARIANT, ];
#[test]
fn test_event_id_canonicalizes_uppercase_to_lowercase() {
let id = EventId::new(VALID_V4_UPPERCASE).expect("an uppercase v4 UUID must be accepted");
assert_eq!(id.as_str(), VALID_V4);
assert_eq!(id, EventId::new(VALID_V4).unwrap());
}
#[test]
fn test_event_id_rejects_non_v4_uuids() {
for uuid in NON_V4_UUIDS {
let err = EventId::new(*uuid).unwrap_err();
assert!(
matches!(err, PaykitError::Validation(_)),
"expected Validation rejection for non-v4 UUID {uuid}",
);
}
}
#[test]
fn test_event_id_rejects_v4_with_non_rfc4122_variant() {
let parsed =
uuid::Uuid::try_parse(V4_NON_RFC4122_VARIANT).expect("fixture must be a parseable UUID");
assert_eq!(
parsed.get_version_num(),
4,
"fixture must carry a version-4 nibble to bypass the version check",
);
assert_ne!(
parsed.get_variant(),
uuid::Variant::RFC4122,
"fixture must carry a non-RFC4122 variant to reach the variant check",
);
let err = EventId::new(V4_NON_RFC4122_VARIANT).unwrap_err();
assert!(
matches!(err, PaykitError::Validation(_)),
"a version-4 UUID with a non-RFC4122 variant must be rejected",
);
}
#[test]
fn test_payment_request_id_routes_through_validator() {
let id = PaymentRequestId::new(VALID_V4).expect("a valid v4 UUID must be accepted");
assert_eq!(id.as_str(), VALID_V4);
let err = PaymentRequestId::new(NON_V4_UUIDS[1]).unwrap_err();
assert!(matches!(err, PaykitError::Validation(_)));
}
#[test]
fn test_receipt_id_routes_through_validator() {
let id = ReceiptId::new(VALID_V4).expect("a valid v4 UUID must be accepted");
assert_eq!(id.as_str(), VALID_V4);
let err = ReceiptId::new(NON_V4_UUIDS[3]).unwrap_err();
assert!(matches!(err, PaykitError::Validation(_)));
}