From 1ecd7effc0240ec96258a51c8681fa0f43a24e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Fri, 25 Nov 2022 18:39:57 +0100 Subject: [PATCH] events: Add tests for serde of encrypted relations --- crates/ruma-common/tests/events/encrypted.rs | 466 +++++++++++++++++++ crates/ruma-common/tests/events/mod.rs | 1 + 2 files changed, 467 insertions(+) create mode 100644 crates/ruma-common/tests/events/encrypted.rs diff --git a/crates/ruma-common/tests/events/encrypted.rs b/crates/ruma-common/tests/events/encrypted.rs new file mode 100644 index 00000000..1f512c45 --- /dev/null +++ b/crates/ruma-common/tests/events/encrypted.rs @@ -0,0 +1,466 @@ +use assert_matches::assert_matches; +use ruma_common::{ + device_id, event_id, + events::room::{ + encrypted::{ + EncryptedEventScheme, MegolmV1AesSha2ContentInit, Reference, Relation, Replacement, + RoomEncryptedEventContent, Thread, + }, + message::InReplyTo, + }, +}; +use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; + +fn encrypted_scheme() -> EncryptedEventScheme { + EncryptedEventScheme::MegolmV1AesSha2( + MegolmV1AesSha2ContentInit { + ciphertext: "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + .to_owned(), + sender_key: "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk".to_owned(), + device_id: device_id!("DEVICE").to_owned(), + session_id: "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw".to_owned(), + } + .into(), + ) +} + +#[test] +fn content_no_relation_serialization() { + let content = RoomEncryptedEventContent::new(encrypted_scheme(), None); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + }) + ); +} + +#[test] +fn content_no_relation_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + assert_matches!(content.relates_to, None); +} + +#[test] +fn content_reply_serialization() { + let content = RoomEncryptedEventContent::new( + encrypted_scheme(), + Some(Relation::Reply { + in_reply_to: InReplyTo::new(event_id!("$replied_to_event").to_owned()), + }), + ); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "m.in_reply_to": { + "event_id": "$replied_to_event", + }, + }, + }) + ); +} + +#[test] +fn content_reply_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "m.in_reply_to": { + "event_id": "$replied_to_event", + }, + }, + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + let in_reply_to = assert_matches!( + content.relates_to, + Some(Relation::Reply { in_reply_to }) => in_reply_to + ); + assert_eq!(in_reply_to.event_id, "$replied_to_event"); +} + +#[test] +fn content_replacement_serialization() { + let content = RoomEncryptedEventContent::new( + encrypted_scheme(), + Some(Relation::Replacement(Replacement::new(event_id!("$replaced_event").to_owned()))), + ); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.replace", + "event_id": "$replaced_event", + }, + }) + ); +} + +#[test] +fn content_replacement_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.replace", + "event_id": "$replaced_event", + }, + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + let replacement = assert_matches!( + content.relates_to, + Some(Relation::Replacement(replacement)) => replacement + ); + assert_eq!(replacement.event_id, "$replaced_event"); +} + +#[test] +fn content_reference_serialization() { + let content = RoomEncryptedEventContent::new( + encrypted_scheme(), + Some(Relation::Reference(Reference::new(event_id!("$referenced_event").to_owned()))), + ); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.reference", + "event_id": "$referenced_event", + }, + }) + ); +} + +#[test] +fn content_reference_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.reference", + "event_id": "$referenced_event", + }, + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + let reference = assert_matches!( + content.relates_to, + Some(Relation::Reference(reference)) => reference + ); + assert_eq!(reference.event_id, "$referenced_event"); +} + +#[test] +fn content_thread_serialization() { + let content = RoomEncryptedEventContent::new( + encrypted_scheme(), + Some(Relation::Thread(Thread::plain( + event_id!("$thread_root").to_owned(), + event_id!("$prev_event").to_owned(), + ))), + ); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.thread", + "event_id": "$thread_root", + "m.in_reply_to": { + "event_id": "$prev_event", + }, + }, + }) + ); +} + +#[test] +fn content_thread_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.thread", + "event_id": "$thread_root", + "m.in_reply_to": { + "event_id": "$prev_event", + }, + }, + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + let thread = assert_matches!( + content.relates_to, + Some(Relation::Thread(thread)) => thread + ); + assert_eq!(thread.event_id, "$thread_root"); + assert_eq!(thread.in_reply_to.event_id, "$prev_event"); + assert!(!thread.is_falling_back); +} + +#[test] +#[cfg(feature = "unstable-msc2677")] +fn content_annotation_serialization() { + use ruma_common::events::room::encrypted::Annotation; + + let content = RoomEncryptedEventContent::new( + encrypted_scheme(), + Some(Relation::Annotation(Annotation::new( + event_id!("$annotated_event").to_owned(), + "some_key".to_owned(), + ))), + ); + + assert_eq!( + to_json_value(&content).unwrap(), + json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.annotation", + "event_id": "$annotated_event", + "key": "some_key", + }, + }) + ); +} + +#[test] +#[cfg(feature = "unstable-msc2677")] +fn content_annotation_deserialization() { + let json = json!({ + "algorithm": "m.megolm.v1.aes-sha2", + "sender_key": "aV9BpqYFqJpKYmgERyGv/6QyKMcgLqxM05V0gvzg9Yk", + "ciphertext": "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF", + "session_id": "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw", + "device_id": "DEVICE", + "m.relates_to": { + "rel_type": "m.annotation", + "event_id": "$annotated_event", + "key": "some_key", + }, + }); + + let content = from_json_value::(json).unwrap(); + + let encrypted_content = assert_matches!( + content.scheme, + EncryptedEventScheme::MegolmV1AesSha2(content) => content + ); + assert_eq!(encrypted_content.session_id, "IkwqWxT2zy3DI1E/zM2Wq+CE8tr3eEpsxsVGjGrMPdw"); + assert_eq!( + encrypted_content.ciphertext, + "AwgAEpABjy6BHczo7UZE3alyej6y2YQ5v+L9eB+fBqL7yteCPv8Jig\ + FCXKWWuwpbZ4nQpvhUbqW0ZX2474FQf0l1dXGQWDMm0VP5p20elkzSf\ + n0uzmHVKGQe+NHUKIczRWsUJ6AbrLBbfFKoIPwfbZ7nQQndjA6F0+PW\ + MoMQHqcrtROrCV/TMux6kDKp7h7O77Y6wp6LD4rU1lwTmKnMYkQGnju\ + c3+FAMvkow26TuS0/fhJG5m+f0GLlP8FQ3fu0Kjw2YUOLl/BU6gPWdk\ + lDl5mzVO3tPnJMKZ0hn+AF" + ); + + let annotation = assert_matches!( + content.relates_to, + Some(Relation::Annotation(annotation)) => annotation + ); + assert_eq!(annotation.event_id, "$annotated_event"); + assert_eq!(annotation.key, "some_key"); +} diff --git a/crates/ruma-common/tests/events/mod.rs b/crates/ruma-common/tests/events/mod.rs index 49639d65..07d3db86 100644 --- a/crates/ruma-common/tests/events/mod.rs +++ b/crates/ruma-common/tests/events/mod.rs @@ -2,6 +2,7 @@ mod audio; mod call; +mod encrypted; mod enums; mod ephemeral_event; mod event;