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());}
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());
}