events: Add a test for encrypted media sources being preferred

This commit is contained in:
Jonas Platte 2022-03-28 14:15:52 +02:00 committed by Jonas Platte
parent 0a53fdb391
commit 8afc3a1100

View File

@ -253,3 +253,66 @@ impl From<JsonWebKeyInit> for JsonWebKey {
Self { kty, key_ops, alg, k, ext }
}
}
#[cfg(test)]
mod tests {
use std::collections::BTreeMap;
use matches::assert_matches;
use serde::Deserialize;
use serde_json::{from_value as from_json_value, json};
use crate::serde::Base64;
use super::{EncryptedFile, JsonWebKey, MediaSource};
#[derive(Deserialize)]
struct MsgWithAttachment {
#[allow(dead_code)]
body: String,
#[serde(flatten)]
source: MediaSource,
}
fn dummy_jwt() -> JsonWebKey {
JsonWebKey {
kty: "oct".to_owned(),
key_ops: vec!["encrypt".to_owned(), "decrypt".to_owned()],
alg: "A256CTR".to_owned(),
k: Base64::new(vec![0; 64]),
ext: true,
}
}
fn encrypted_file() -> EncryptedFile {
EncryptedFile {
url: "mxc://localhost/encrypted_file".into(),
key: dummy_jwt(),
iv: Base64::new(vec![0; 64]),
hashes: BTreeMap::new(),
v: "v2".to_owned(),
}
}
#[test]
fn prefer_encrypted_attachment_over_plain() {
let msg: MsgWithAttachment = from_json_value(json!({
"body": "",
"url": "mxc://localhost/file",
"file": encrypted_file(),
}))
.unwrap();
assert_matches!(msg.source, MediaSource::Encrypted(_));
// As above, but with the file field before the url field
let msg: MsgWithAttachment = from_json_value(json!({
"body": "",
"file": encrypted_file(),
"url": "mxc://localhost/file",
}))
.unwrap();
assert_matches!(msg.source, MediaSource::Encrypted(_));
}
}