71 lines · 2.5 KB · Rust
RawDownload
use cloud_objects::auth::UserUid;use cloud_objects::cloud_object::{CloudObjectGuest, ServerObjectContainer};use cloud_objects::drive::sharing::{    LinkSharingSubjectType, SharingAccessLevel, Subject, TeamKind, UserKind,};use cloud_objects::ids::ServerId;use lazy_static::lazy_static;use session_sharing_protocol::common::{InputReplicaId, ProfileData}; #[test]fn test_roundtrip_guests() {    let guests = vec![        CloudObjectGuest {            subject: Subject::User(UserKind::Account(UserUid::new("firebase_uid"))),            access_level: SharingAccessLevel::Edit,            source: None,        },        CloudObjectGuest {            subject: Subject::PendingUser {                email: Some("pending@warp.dev".to_string()),            },            access_level: SharingAccessLevel::View,            source: Some(ServerObjectContainer::Folder {                folder_uid: 123.into(),            }),        },        CloudObjectGuest {            subject: Subject::Team(TeamKind::Team {                team_uid: ServerId::from(99),            }),            access_level: SharingAccessLevel::Edit,            source: None,        },    ];     let encoded = super::encode_guests(&guests).expect("encode should succeed");    let decoded = super::decode_guests(&encoded).expect("decode should succeed");     assert_eq!(guests, decoded);} lazy_static! {    /// By construction, [`CloudObjectGuest`] only accepts `'static`-lifetime [`Subject`]s.    ///    /// In most cases, this would prevent persisting a shared session subject, but we work around    /// it here for completeness;    static ref PROFILE_DATA: ProfileData = ProfileData {        firebase_uid: "2YP93GScglXJMdEr2Id12dI7HCG3".to_string(),        display_name: "Some User".to_string(),        photo_url: Some("http://example.com/some-image".to_string()),        email: Some("user@warp.dev".to_string()),        input_replica_id: InputReplicaId::from("some-id".to_string()),    };} #[test]fn test_fail_unsupported_subjects() {    let result = super::encode_guests(&[CloudObjectGuest {        subject: Subject::AnyoneWithLink(LinkSharingSubjectType::Anyone),        access_level: SharingAccessLevel::View,        source: None,    }]);    assert!(result.is_err());     let result = super::encode_guests(&[CloudObjectGuest {        subject: Subject::User(UserKind::SharedSessionParticipant(PROFILE_DATA.clone())),        access_level: SharingAccessLevel::View,        source: None,    }]);    assert!(result.is_err());}