events: Add tests for serde of encrypted relations
This commit is contained in:
		
							parent
							
								
									03230013d9
								
							
						
					
					
						commit
						1ecd7effc0
					
				
							
								
								
									
										466
									
								
								crates/ruma-common/tests/events/encrypted.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										466
									
								
								crates/ruma-common/tests/events/encrypted.rs
									
									
									
									
									
										Normal file
									
								
							| @ -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::<RoomEncryptedEventContent>(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::<RoomEncryptedEventContent>(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::<RoomEncryptedEventContent>(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::<RoomEncryptedEventContent>(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::<RoomEncryptedEventContent>(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::<RoomEncryptedEventContent>(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"); | ||||||
|  | } | ||||||
| @ -2,6 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| mod audio; | mod audio; | ||||||
| mod call; | mod call; | ||||||
|  | mod encrypted; | ||||||
| mod enums; | mod enums; | ||||||
| mod ephemeral_event; | mod ephemeral_event; | ||||||
| mod event; | mod event; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user