calendar_event_builder.rs (2110B)
1 #[path = "../src/test_fixtures.rs"] 2 mod test_fixtures; 3 4 use nostr::{Keys, SecretKey, UnsignedEvent}; 5 use radroots_event::calendar::{ 6 AuthoredCalendarDateEvent, AuthoredCalendarTimeEvent, CalendarDate, 7 }; 8 use radroots_nostr::event::{Timestamp, build_calendar_date, build_calendar_time}; 9 10 #[test] 11 fn typed_calendar_builders_finalize_exact_plans_for_an_external_host_signer() { 12 let keys = Keys::new( 13 SecretKey::from_hex(test_fixtures::FIXTURE_ALICE_SECRET_KEY_HEX).expect("fixture key"), 14 ); 15 let created_at = Timestamp::from_secs(1_784_347_200); 16 let date = AuthoredCalendarDateEvent::new( 17 "market-day", 18 "Saturday Market", 19 CalendarDate::parse("2026-08-08").expect("date"), 20 ) 21 .expect("date event"); 22 let time = AuthoredCalendarTimeEvent::new("farm-tour", "Farm Tour", 1_784_380_800) 23 .expect("time event"); 24 25 let builders = [ 26 ( 27 "radroots.calendar.date_event.v1", 28 31_922, 29 build_calendar_date(&date).expect("date builder"), 30 ), 31 ( 32 "radroots.calendar.time_event.v1", 33 31_923, 34 build_calendar_time(&time).expect("time builder"), 35 ), 36 ]; 37 for (contract_id, kind, builder) in builders { 38 let request = builder 39 .custom_created_at(created_at) 40 .into_external_signing_request(keys.public_key()) 41 .expect("external signing request"); 42 let plan = request.authored_plan().expect("typed plan").clone(); 43 assert_eq!(plan.body().contract().contract_id().as_str(), contract_id); 44 assert_eq!(plan.body().kind(), kind); 45 assert_eq!(plan.created_at(), created_at.as_secs()); 46 47 let unsigned: UnsignedEvent = 48 serde_json::from_value(serde_json::to_value(&request).expect("request JSON")) 49 .expect("unsigned event"); 50 let signed = unsigned.sign_with_keys(&keys).expect("host signature"); 51 let completed = request.complete(signed).expect("exact completion"); 52 assert_eq!(completed.id.to_hex(), plan.expected_event_id().to_hex()); 53 } 54 }