field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

identity_contract.rs (2317B)


      1 use radroots_storage::authored_draft::{AuthoredDraftId, AuthoredDraftRevision};
      2 use tera_core::runtime::product_surface::{LocalNetwork, Phase1ExistingDraft, Phase1QueueIntent};
      3 use tera_ffi::{FfiLocalNetworkRecord, MOBILE_FFI_SCHEMA_VERSION};
      4 
      5 #[test]
      6 fn stable_context_id_and_generation_keep_the_existing_wire_shape() {
      7     let context = LocalNetwork::new(
      8         "nearby".into(),
      9         "Nearby".into(),
     10         vec!["wss://relay.example".into()],
     11         None,
     12         vec![],
     13         u64::MAX,
     14     )
     15     .unwrap();
     16     let wire = serde_json::to_value(&context).unwrap();
     17     assert_eq!(wire["id"], "nearby");
     18     assert_eq!(wire["generation"], u64::MAX);
     19     assert_eq!(
     20         serde_json::from_value::<LocalNetwork>(wire).unwrap(),
     21         context
     22     );
     23     let dto = FfiLocalNetworkRecord::from(context);
     24     assert_eq!(dto.schema_version, MOBILE_FFI_SCHEMA_VERSION);
     25     assert_eq!(dto.id, "nearby");
     26     assert_eq!(dto.generation, u64::MAX);
     27 }
     28 
     29 #[test]
     30 fn shared_draft_identity_and_revision_remain_validated_at_app_admission() {
     31     let id = AuthoredDraftId::new([7; 16]).unwrap();
     32     let encoded = serde_json::to_value(id).unwrap();
     33     assert_eq!(encoded, serde_json::to_value([7; 16]).unwrap());
     34     assert_eq!(
     35         serde_json::from_value::<AuthoredDraftId>(encoded).unwrap(),
     36         id
     37     );
     38     for revision in [1, i64::MAX as u64, (i64::MAX as u64) + 1, u64::MAX] {
     39         let typed = AuthoredDraftRevision::new(revision).unwrap();
     40         let wire = serde_json::to_string(&typed).unwrap();
     41         assert_eq!(wire, revision.to_string());
     42         assert_eq!(
     43             serde_json::from_str::<AuthoredDraftRevision>(&wire).unwrap(),
     44             typed
     45         );
     46         assert!(Phase1ExistingDraft::new(*id.as_bytes(), revision).is_ok());
     47         assert!(Phase1QueueIntent::new(*id.as_bytes(), revision).is_ok());
     48     }
     49     assert!(
     50         AuthoredDraftRevision::new(u64::MAX)
     51             .unwrap()
     52             .next()
     53             .is_err()
     54     );
     55     for (id, revision) in [([0; 16], 1), ([7; 16], 0)] {
     56         assert!(Phase1ExistingDraft::new(id, revision).is_err());
     57         assert!(Phase1QueueIntent::new(id, revision).is_err());
     58     }
     59     for wire in ["0", "-1", "18446744073709551616", "1.5"] {
     60         assert!(serde_json::from_str::<AuthoredDraftRevision>(wire).is_err());
     61     }
     62 }