tests.rs (3093B)
1 use super::*; 2 use radroots_event::envelope::EventEnvelopeParts; 3 4 #[test] 5 fn id_verification_returns_the_exact_envelope() { 6 let event = signed_max_kind_event(); 7 let verified = verify_event_id(event.clone()).expect("canonical event id"); 8 9 assert_eq!(verified.event(), &event); 10 assert_eq!(verified.into_event(), event); 11 } 12 13 #[test] 14 fn signature_verification_returns_the_exact_envelope() { 15 let event = signed_max_kind_event(); 16 let verified = verify_nip01_event(event.clone()).expect("valid Schnorr signature"); 17 18 assert_eq!(verified.event(), &event); 19 assert_eq!(verified.into_event(), event); 20 } 21 22 #[test] 23 fn verification_error_codes_are_stable() { 24 let errors = [ 25 ( 26 RadrootsNip01VerificationError::MalformedEnvelope, 27 "malformed_envelope", 28 ), 29 ( 30 RadrootsNip01VerificationError::KindOutOfRange { kind: 65_536 }, 31 "kind_out_of_range", 32 ), 33 ( 34 RadrootsNip01VerificationError::IdMismatch { 35 expected: "expected".to_string(), 36 actual: "actual".to_string(), 37 }, 38 "id_mismatch", 39 ), 40 ( 41 RadrootsNip01VerificationError::SignatureInvalid, 42 "signature_invalid", 43 ), 44 ]; 45 46 for (error, expected) in errors { 47 assert_eq!(error.code(), expected); 48 assert!(!error.to_string().is_empty()); 49 } 50 } 51 52 #[test] 53 fn id_verification_rejects_an_out_of_range_kind_before_hashing() { 54 let original = signed_max_kind_event(); 55 let kind = u32::from(u16::MAX) + 1; 56 let id = compute_canonical_nip01_event_id_v1( 57 &original.author().to_hex(), 58 original.created_at_u64(), 59 kind, 60 &original.tags_as_vec(), 61 original.content(), 62 ) 63 .expect("canonical hash remains mechanically computable") 64 .into_string(); 65 let event = EventEnvelope::new(EventEnvelopeParts { 66 id, 67 author: original.author().to_hex().to_owned(), 68 created_at: original.created_at_u64(), 69 kind, 70 tags: original.tags_as_vec(), 71 content: original.content().to_owned(), 72 sig: original.signature_hex(), 73 }) 74 .expect("base envelope permits the wider internal kind representation"); 75 76 assert_eq!( 77 verify_event_id(event), 78 Err(RadrootsNip01VerificationError::KindOutOfRange { kind }) 79 ); 80 } 81 82 fn signed_max_kind_event() -> EventEnvelope { 83 EventEnvelope::new(EventEnvelopeParts { 84 id: "a07878757d705d3cd848b9264791d699069068a5f0a575112f351367b0987958" 85 .to_string(), 86 author: "1b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f" 87 .to_string(), 88 created_at: 1_800_000_104, 89 kind: u32::from(u16::MAX), 90 tags: Vec::new(), 91 content: "maximum-kind".to_string(), 92 sig: "d79b19843a0bfd769c02c73866d44a3a06f7b11e107a5257971b60e700aa25565802fd3a7eed4042fe8db7d709a465e5f61478eb8291178831bf48f6b0980671" 93 .to_string(), 94 }) 95 .expect("valid event envelope") 96 }