Skip to content

Commit 8d3c76a

Browse files
jmartinesppoljar
authored andcommitted
test: Add some extra tests for checking Room::is_dm
1 parent 547a0ea commit 8d3c76a

1 file changed

Lines changed: 99 additions & 3 deletions

File tree

  • crates/matrix-sdk/tests/integration/room

crates/matrix-sdk/tests/integration/room/common.rs

Lines changed: 99 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
use std::{collections::BTreeMap, iter, time::Duration};
1+
use std::{collections::BTreeMap, iter, ops::Not, time::Duration};
22

33
use assert_matches2::{assert_let, assert_matches};
44
use js_int::uint;
55
use matrix_sdk::{
66
RoomDisplayName, RoomMemberships,
77
config::{SyncSettings, SyncToken},
88
room::RoomMember,
9-
test_utils::mocks::MatrixMockServer,
9+
test_utils::mocks::{AnyRoomBuilder, MatrixMockServer},
1010
};
11+
use matrix_sdk_base::DmRoomDefinition;
1112
use matrix_sdk_test::{
1213
BOB, DEFAULT_TEST_ROOM_ID, JoinedRoomBuilder, LeftRoomBuilder, SyncResponseBuilder, async_test,
1314
bulk_room_members, event_factory::EventFactory, sync_state_event, test_json,
1415
};
1516
use ruma::{
1617
event_id,
1718
events::{
18-
AnySyncStateEvent, AnySyncTimelineEvent, StateEventType,
19+
AnyGlobalAccountDataEvent, AnySyncStateEvent, AnySyncTimelineEvent, StateEventType,
1920
direct::DirectUserIdentifier,
2021
room::{avatar, member::MembershipState, message::RoomMessageEventContent},
2122
},
@@ -892,3 +893,98 @@ async fn test_room_avatar() {
892893
assert_eq!(avatar_info.mimetype.as_deref(), Some("image/png"));
893894
assert_eq!(avatar_info.size, Some(uint!(5243)));
894895
}
896+
897+
#[async_test]
898+
async fn test_is_dm_using_matrix_spec() {
899+
let server = MatrixMockServer::new().await;
900+
let client = server
901+
.client_builder()
902+
.on_builder(|b| b.dm_room_definition(DmRoomDefinition::MatrixSpec))
903+
.build()
904+
.await;
905+
let alice_user_id = user_id!("@alice:localhost");
906+
907+
let room_id = room_id!("!room:localhost");
908+
909+
// We mock the m.direct account data with a single target for the room id
910+
let direct_data = EventFactory::new()
911+
.direct()
912+
.add_user(alice_user_id.to_owned().into(), room_id)
913+
.into_raw::<AnyGlobalAccountDataEvent>();
914+
server
915+
.mock_sync()
916+
.ok_and_run(&client, |response| {
917+
response.add_global_account_data(direct_data);
918+
})
919+
.await;
920+
921+
let room = server.sync_joined_room(&client, room_id).await;
922+
// Room has direct targets, so it's considered direct and a DM using the spec
923+
// definition.
924+
assert!(room.is_dm().await.unwrap());
925+
926+
// We mock the m.direct account data with no targets
927+
let direct_data = EventFactory::new().direct().into_raw::<AnyGlobalAccountDataEvent>();
928+
server
929+
.mock_sync()
930+
.ok_and_run(&client, |response| {
931+
response.add_global_account_data(direct_data);
932+
})
933+
.await;
934+
935+
// Room doesn't have direct targets anymore, so it's not a DM using the spec
936+
// definition.
937+
assert!(room.is_dm().await.unwrap().not());
938+
}
939+
940+
#[async_test]
941+
async fn test_is_dm_using_at_most_two_members_definition() {
942+
let server = MatrixMockServer::new().await;
943+
let client = server
944+
.client_builder()
945+
.on_builder(|b| b.dm_room_definition(DmRoomDefinition::TwoMembers))
946+
.build()
947+
.await;
948+
let alice_user_id = user_id!("@alice:localhost");
949+
950+
let room_id = room_id!("!room:localhost");
951+
952+
// We mock the m.direct account data with a single target for the room id
953+
let direct_data = EventFactory::new()
954+
.direct()
955+
.add_user(alice_user_id.to_owned().into(), room_id)
956+
.into_raw::<AnyGlobalAccountDataEvent>();
957+
server
958+
.mock_sync()
959+
.ok_and_run(&client, |response| {
960+
response.add_global_account_data(direct_data);
961+
})
962+
.await;
963+
964+
// The room has direct targets, and 2 active users, so it's a DM.
965+
let room = server
966+
.sync_room(
967+
&client,
968+
AnyRoomBuilder::Joined(JoinedRoomBuilder::new(room_id).set_joined_members_count(2)),
969+
)
970+
.await;
971+
assert!(room.is_dm().await.unwrap());
972+
973+
// The room has direct targets, and a single active user, so it's a DM.
974+
let room = server
975+
.sync_room(
976+
&client,
977+
AnyRoomBuilder::Joined(JoinedRoomBuilder::new(room_id).set_joined_members_count(1)),
978+
)
979+
.await;
980+
assert!(room.is_dm().await.unwrap());
981+
982+
// The room has direct targets, and > 2 active users, so it's NOT a DM.
983+
let room = server
984+
.sync_room(
985+
&client,
986+
AnyRoomBuilder::Joined(JoinedRoomBuilder::new(room_id).set_joined_members_count(3)),
987+
)
988+
.await;
989+
assert!(!room.is_dm().await.unwrap());
990+
}

0 commit comments

Comments
 (0)