xmtp_mls_common/app_data/
component_permissions.rs1use xmtp_proto::xmtp::mls::message_contents::{
2 ComponentPermissions, MetadataPolicy as MetadataPolicyProto,
3};
4
5#[bon::builder]
20pub fn component_permissions(
21 insert: MetadataPolicyProto,
22 update: MetadataPolicyProto,
23 delete: MetadataPolicyProto,
24) -> ComponentPermissions {
25 ComponentPermissions {
26 insert_policy: Some(insert),
27 update_policy: Some(update),
28 delete_policy: Some(delete),
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use prost::Message;
36 use xmtp_proto::xmtp::mls::message_contents::metadata_policy::{
37 Kind as MetadataPolicyKind, MetadataBasePolicy,
38 };
39
40 fn make_base_policy(base: MetadataBasePolicy) -> MetadataPolicyProto {
41 MetadataPolicyProto {
42 kind: Some(MetadataPolicyKind::Base(base as i32)),
43 }
44 }
45
46 fn allow() -> MetadataPolicyProto {
47 make_base_policy(MetadataBasePolicy::Allow)
48 }
49
50 fn deny() -> MetadataPolicyProto {
51 make_base_policy(MetadataBasePolicy::Deny)
52 }
53
54 fn admin_only() -> MetadataPolicyProto {
55 make_base_policy(MetadataBasePolicy::AllowIfAdmin)
56 }
57
58 #[xmtp_common::test]
59 fn test_permission_encode_decode_round_trip() {
60 let perm = component_permissions()
61 .insert(allow())
62 .update(admin_only())
63 .delete(deny())
64 .call();
65 let bytes = perm.encode_to_vec();
66 let decoded = ComponentPermissions::decode(bytes.as_slice()).unwrap();
67 assert_eq!(perm, decoded);
68 }
69
70 #[xmtp_common::test]
71 fn test_all_deny() {
72 let perm = component_permissions()
73 .insert(deny())
74 .update(deny())
75 .delete(deny())
76 .call();
77 let bytes = perm.encode_to_vec();
78 let decoded = ComponentPermissions::decode(bytes.as_slice()).unwrap();
79 assert_eq!(perm, decoded);
80 }
81
82 #[xmtp_common::test]
83 fn test_builder_sets_all_fields() {
84 let perm = component_permissions()
85 .insert(allow())
86 .update(admin_only())
87 .delete(deny())
88 .call();
89 assert!(perm.insert_policy.is_some());
90 assert!(perm.update_policy.is_some());
91 assert!(perm.delete_policy.is_some());
92 }
93}