72 lines
2.5 KiB
Rust
72 lines
2.5 KiB
Rust
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());
|
|
}
|