lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

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 }