diff --git a/matrix_sdk_base/src/store/memory_store.rs b/matrix_sdk_base/src/store/memory_store.rs index e430f6ec..7d15254a 100644 --- a/matrix_sdk_base/src/store/memory_store.rs +++ b/matrix_sdk_base/src/store/memory_store.rs @@ -563,13 +563,16 @@ impl StateStore for MemoryStore { #[cfg(not(feature = "sled_state_store"))] mod test { use matrix_sdk_common::{ - identifiers::{event_id, room_id, user_id}, + api::r0::media::get_content_thumbnail::Method, + identifiers::{event_id, mxc_uri, room_id, user_id, UserId}, receipt::ReceiptType, + uint, }; use matrix_sdk_test::async_test; use serde_json::json; use super::{MemoryStore, StateChanges}; + use crate::media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}; fn user_id() -> UserId { user_id!("@example:localhost") @@ -668,4 +671,43 @@ mod test { 1 ); } + + #[async_test] + async fn test_media_content() { + let store = MemoryStore::new(); + + let uri = mxc_uri!("mxc://localhost/media"); + let content: Vec = "somebinarydata".into(); + + let request_file = + MediaRequest { media_type: MediaType::Uri(uri.clone()), format: MediaFormat::File }; + + let request_thumbnail = MediaRequest { + media_type: MediaType::Uri(uri.clone()), + format: MediaFormat::Thumbnail(MediaThumbnailSize { + method: Method::Crop, + width: uint!(100), + height: uint!(100), + }), + }; + + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_none()); + + store.add_media_content(&request_file, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_some()); + + store.remove_media_content(&request_file).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + + store.add_media_content(&request_file, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_some()); + + store.add_media_content(&request_thumbnail, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_some()); + + store.remove_media_content_for_uri(&uri).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_none()); + } } diff --git a/matrix_sdk_base/src/store/sled_store/mod.rs b/matrix_sdk_base/src/store/sled_store/mod.rs index e496250a..13d35184 100644 --- a/matrix_sdk_base/src/store/sled_store/mod.rs +++ b/matrix_sdk_base/src/store/sled_store/mod.rs @@ -900,6 +900,7 @@ mod test { use std::convert::TryFrom; use matrix_sdk_common::{ + api::r0::media::get_content_thumbnail::Method, events::{ room::{ member::{MemberEventContent, MembershipState}, @@ -907,15 +908,19 @@ mod test { }, AnySyncStateEvent, EventType, Unsigned, }, - identifiers::{event_id, room_id, user_id, EventId, UserId}, + identifiers::{event_id, mxc_uri, room_id, user_id, EventId, UserId}, receipt::ReceiptType, - MilliSecondsSinceUnixEpoch, Raw, + uint, MilliSecondsSinceUnixEpoch, Raw, }; use matrix_sdk_test::async_test; use serde_json::json; use super::{SledStore, StateChanges}; - use crate::{deserialized_responses::MemberEvent, StateStore}; + use crate::{ + deserialized_responses::MemberEvent, + media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, + StateStore, + }; fn user_id() -> UserId { user_id!("@example:localhost") @@ -1087,4 +1092,43 @@ mod test { 1 ); } + + #[async_test] + async fn test_media_content() { + let store = SledStore::open().unwrap(); + + let uri = mxc_uri!("mxc://localhost/media"); + let content: Vec = "somebinarydata".into(); + + let request_file = + MediaRequest { media_type: MediaType::Uri(uri.clone()), format: MediaFormat::File }; + + let request_thumbnail = MediaRequest { + media_type: MediaType::Uri(uri.clone()), + format: MediaFormat::Thumbnail(MediaThumbnailSize { + method: Method::Crop, + width: uint!(100), + height: uint!(100), + }), + }; + + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_none()); + + store.add_media_content(&request_file, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_some()); + + store.remove_media_content(&request_file).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + + store.add_media_content(&request_file, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_some()); + + store.add_media_content(&request_thumbnail, content.clone()).await.unwrap(); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_some()); + + store.remove_media_content_for_uri(&uri).await.unwrap(); + assert!(store.get_media_content(&request_file).await.unwrap().is_none()); + assert!(store.get_media_content(&request_thumbnail).await.unwrap().is_none()); + } }