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 call; | ||||
| mod encrypted; | ||||
| mod enums; | ||||
| mod ephemeral_event; | ||||
| mod event; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user