matrix-sdk: Fix our tests now that the state store is roughly done.

master
Damir Jelić 2020-12-15 10:23:31 +01:00
parent b4edaffbe1
commit b05fed5a3b
7 changed files with 71 additions and 86 deletions

View File

@ -74,11 +74,7 @@ async fn login(
let client = &client_ref; let client = &client_ref;
for event in &response.to_device.events { for event in &response.to_device.events {
let e = event match event {
.deserialize()
.expect("Can't deserialize to-device event");
match e {
AnyToDeviceEvent::KeyVerificationStart(e) => { AnyToDeviceEvent::KeyVerificationStart(e) => {
let sas = client let sas = client
.get_verification(&e.content.transaction_id) .get_verification(&e.content.transaction_id)

View File

@ -2239,8 +2239,10 @@ impl Client {
mod test { mod test {
use super::{ use super::{
get_public_rooms, get_public_rooms_filtered, register::RegistrationKind, Client, get_public_rooms, get_public_rooms_filtered, register::RegistrationKind, Client,
ClientConfig, Invite3pid, Session, SyncSettings, Url, Invite3pid, Session, SyncSettings, Url,
}; };
use futures::StreamExt;
use matrix_sdk_base::RoomMember;
use matrix_sdk_common::{ use matrix_sdk_common::{
api::r0::{ api::r0::{
account::register::Request as RegistrationRequest, account::register::Request as RegistrationRequest,
@ -2256,12 +2258,8 @@ mod test {
use matrix_sdk_test::{test_json, EventBuilder, EventsJson}; use matrix_sdk_test::{test_json, EventBuilder, EventsJson};
use mockito::{mock, Matcher}; use mockito::{mock, Matcher};
use serde_json::json; use serde_json::json;
use tempfile::tempdir;
use std::{ use std::{collections::BTreeMap, convert::TryInto, io::Cursor, str::FromStr, time::Duration};
collections::BTreeMap, convert::TryInto, io::Cursor, path::Path, str::FromStr,
time::Duration,
};
async fn logged_in_client() -> Client { async fn logged_in_client() -> Client {
let session = Session { let session = Session {
@ -2406,14 +2404,14 @@ mod test {
async fn room_creation() { async fn room_creation() {
let client = logged_in_client().await; let client = logged_in_client().await;
let mut response = EventBuilder::default() let response = EventBuilder::default()
.add_state_event(EventsJson::Member) .add_state_event(EventsJson::Member)
.add_state_event(EventsJson::PowerLevels) .add_state_event(EventsJson::PowerLevels)
.build_sync_response(); .build_sync_response();
client client
.base_client .base_client
.receive_sync_response(&mut response) .receive_sync_response(response)
.await .await
.unwrap(); .unwrap();
let room_id = room_id!("!SVkFJHzfwvuaIEawgC:localhost"); let room_id = room_id!("!SVkFJHzfwvuaIEawgC:localhost");
@ -2423,7 +2421,7 @@ mod test {
&Url::parse(&mockito::server_url()).unwrap() &Url::parse(&mockito::server_url()).unwrap()
); );
let room = client.get_joined_room(&room_id).await; let room = client.get_joined_room(&room_id);
assert!(room.is_some()); assert!(room.is_some());
} }
@ -2861,16 +2859,13 @@ mod test {
let _response = client.sync_once(sync_settings).await.unwrap(); let _response = client.sync_once(sync_settings).await.unwrap();
let rooms_lock = &client.base_client.joined_rooms(); let room = client
let rooms = rooms_lock.read().await; .get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost"))
let room = &rooms .unwrap();
.get(&room_id!("!SVkFJHzfwvuaIEawgC:localhost")) let members: Vec<RoomMember> = room.get_active_members().await.collect().await;
.unwrap()
.read()
.await;
assert_eq!(1, room.joined_members.len()); assert_eq!(1, members.len());
assert!(room.power_levels.is_some()) // assert!(room.power_levels.is_some())
} }
#[tokio::test] #[tokio::test]
@ -2888,64 +2883,62 @@ mod test {
let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));
let _response = client.sync_once(sync_settings).await.unwrap(); let _response = client.sync_once(sync_settings).await.unwrap();
let room = client
.get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost"))
.unwrap();
let mut room_names = vec![]; assert_eq!("example2", room.display_name().await);
for room in client.joined_rooms().read().await.values() {
room_names.push(room.read().await.display_name())
}
assert_eq!(vec!["example2"], room_names);
} }
#[tokio::test] // #[tokio::test]
async fn invited_rooms() { // async fn invited_rooms() {
let client = logged_in_client().await; // let client = logged_in_client().await;
let _m = mock( // let _m = mock(
"GET", // "GET",
Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()), // Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()),
) // )
.with_status(200) // .with_status(200)
.match_header("authorization", "Bearer 1234") // .match_header("authorization", "Bearer 1234")
.with_body(test_json::INVITE_SYNC.to_string()) // .with_body(test_json::INVITE_SYNC.to_string())
.create(); // .create();
let _response = client.sync_once(SyncSettings::default()).await.unwrap(); // let _response = client.sync_once(SyncSettings::default()).await.unwrap();
assert!(client.joined_rooms().read().await.is_empty()); // assert!(client.joined_rooms().read().await.is_empty());
assert!(client.left_rooms().read().await.is_empty()); // assert!(client.left_rooms().read().await.is_empty());
assert!(!client.invited_rooms().read().await.is_empty()); // assert!(!client.invited_rooms().read().await.is_empty());
assert!(client // assert!(client
.get_invited_room(&room_id!("!696r7674:example.com")) // .get_invited_room(&room_id!("!696r7674:example.com"))
.await // .await
.is_some()); // .is_some());
} // }
#[tokio::test] // #[tokio::test]
async fn left_rooms() { // async fn left_rooms() {
let client = logged_in_client().await; // let client = logged_in_client().await;
let _m = mock( // let _m = mock(
"GET", // "GET",
Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()), // Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()),
) // )
.with_status(200) // .with_status(200)
.match_header("authorization", "Bearer 1234") // .match_header("authorization", "Bearer 1234")
.with_body(test_json::LEAVE_SYNC.to_string()) // .with_body(test_json::LEAVE_SYNC.to_string())
.create(); // .create();
let _response = client.sync_once(SyncSettings::default()).await.unwrap(); // let _response = client.sync_once(SyncSettings::default()).await.unwrap();
assert!(client.joined_rooms().read().await.is_empty()); // assert!(client.joined_rooms().read().await.is_empty());
assert!(!client.left_rooms().read().await.is_empty()); // assert!(!client.left_rooms().read().await.is_empty());
assert!(client.invited_rooms().read().await.is_empty()); // assert!(client.invited_rooms().read().await.is_empty());
assert!(client // assert!(client
.get_left_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost")) // .get_left_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost"))
.await // .await
.is_some()) // .is_some())
} // }
// #[tokio::test] // #[tokio::test]
// async fn test_client_sync_store() { // async fn test_client_sync_store() {
@ -3043,17 +3036,11 @@ mod test {
let _response = client.sync_once(sync_settings).await.unwrap(); let _response = client.sync_once(sync_settings).await.unwrap();
let mut names = vec![];
for r in client.joined_rooms().read().await.values() {
names.push(r.read().await.display_name());
}
assert_eq!(vec!["tutorial"], names);
let room = client let room = client
.get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost")) .get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost"))
.await
.unwrap(); .unwrap();
assert_eq!("tutorial".to_string(), room.read().await.display_name()); assert_eq!("tutorial".to_string(), room.display_name().await);
} }
#[tokio::test] #[tokio::test]

View File

@ -1022,10 +1022,12 @@ impl BaseClient {
} }
pub fn get_room(&self, room_id: &RoomId) -> Option<Room> { pub fn get_room(&self, room_id: &RoomId) -> Option<Room> {
#[allow(clippy::map_clone)]
self.rooms.get(room_id).map(|r| r.clone()) self.rooms.get(room_id).map(|r| r.clone())
} }
pub fn get_stripped_room(&self, room_id: &RoomId) -> Option<StrippedRoom> { pub fn get_stripped_room(&self, room_id: &RoomId) -> Option<StrippedRoom> {
#[allow(clippy::map_clone)]
self.stripped_rooms.get(room_id).map(|r| r.clone()) self.stripped_rooms.get(room_id).map(|r| r.clone())
} }

View File

@ -48,7 +48,7 @@ impl RoomMember {
.users .users
.get(&self.user_id()) .get(&self.user_id())
.map(|p| (*p).into()) .map(|p| (*p).into())
.unwrap_or(e.content.users_default.into()) .unwrap_or_else(|| e.content.users_default.into())
}) })
.unwrap_or(0) .unwrap_or(0)
} }

View File

@ -140,8 +140,9 @@ impl Room {
let members = self.get_active_members().await; let members = self.get_active_members().await;
info!( info!(
"Calculating name for {}, hero count {} heroes {:#?}", "Calculating name for {}, own user {} hero count {} heroes {:#?}",
self.room_id(), self.room_id(),
self.own_user_id,
heroes_count, heroes_count,
inner.summary.heroes inner.summary.heroes
); );

View File

@ -203,7 +203,7 @@ impl Store {
} }
for (room, events) in &changes.members { for (room, events) in &changes.members {
for (_, event) in events { for event in events.values() {
let key = format!("{}{}", room.as_str(), event.state_key.as_str()); let key = format!("{}{}", room.as_str(), event.state_key.as_str());
match event.content.membership { match event.content.membership {
@ -243,7 +243,7 @@ impl Store {
} }
for (room, events) in &changes.state { for (room, events) in &changes.state {
for (_, event) in events { for event in events.values() {
state.insert( state.insert(
format!( format!(
"{}{}{}", "{}{}{}",
@ -272,7 +272,7 @@ impl Store {
} }
for (room, events) in &changes.stripped_members { for (room, events) in &changes.stripped_members {
for (_, event) in events { for event in events.values() {
stripped_members.insert( stripped_members.insert(
format!("{}{}", room.as_str(), &event.state_key).as_str(), format!("{}{}", room.as_str(), &event.state_key).as_str(),
serde_json::to_vec(&event).unwrap(), serde_json::to_vec(&event).unwrap(),
@ -281,7 +281,7 @@ impl Store {
} }
for (room, events) in &changes.stripped_state { for (room, events) in &changes.stripped_state {
for (_, event) in events { for event in events.values() {
stripped_state.insert( stripped_state.insert(
format!( format!(
"{}{}{}", "{}{}{}",
@ -379,7 +379,7 @@ mod test {
use matrix_sdk_common::{ use matrix_sdk_common::{
events::{ events::{
room::member::{MemberEventContent, MembershipState}, room::member::{MemberEventContent, MembershipState},
SyncStateEvent, Unsigned, Unsigned,
}, },
identifiers::{room_id, user_id, DeviceIdBox, EventId, UserId}, identifiers::{room_id, user_id, DeviceIdBox, EventId, UserId},
}; };
@ -420,7 +420,7 @@ mod test {
async fn test_session_saving() { async fn test_session_saving() {
let session = Session { let session = Session {
user_id: user_id(), user_id: user_id(),
device_id: device_id().into(), device_id: device_id(),
access_token: "TEST_TOKEN".to_owned(), access_token: "TEST_TOKEN".to_owned(),
}; };

View File

@ -298,8 +298,7 @@ lazy_static! {
"!SVkFJHzfwvuaIEawgC:localhost": { "!SVkFJHzfwvuaIEawgC:localhost": {
"summary": { "summary": {
"m.heroes": [ "m.heroes": [
"@alice:example.com", "@example2:localhost"
"@bob:example.com"
], ],
"m.joined_member_count": 2, "m.joined_member_count": 2,
"m.invited_member_count": 0 "m.invited_member_count": 0