mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-15 03:25:46 -04:00
Merge pull request #852 from zecakeh/test-bulk-member
test(sdk): Split tests for permalinks
This commit is contained in:
43
crates/matrix-sdk-test/src/event_builder/bulk.rs
Normal file
43
crates/matrix-sdk-test/src/event_builder/bulk.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
use std::ops::Range;
|
||||
|
||||
use ruma::{
|
||||
events::{room::member::MembershipState, AnySyncStateEvent},
|
||||
serde::Raw,
|
||||
};
|
||||
use serde_json::{from_value as from_json_value, json};
|
||||
|
||||
/// Create `m.room.member` events in the given range.
|
||||
///
|
||||
/// The user IDs are generated as `@user_{idx}:{server}`, with `idx` being the
|
||||
/// current value in `range`, so providing the same range in several method
|
||||
/// calls will create events that replace the previous state.
|
||||
///
|
||||
/// The event IDs are generated as `$roommember_{batch}_{idx}` so it's important
|
||||
/// to increment `batch` between method calls to avoid having two events with
|
||||
/// the same event ID.
|
||||
///
|
||||
/// This method can be used as input for room builders with
|
||||
/// `add_timeline_state_bulk()` or `add_state_bulk()`.
|
||||
pub fn bulk_room_members<'a>(
|
||||
batch: usize,
|
||||
range: Range<usize>,
|
||||
server: &'a str,
|
||||
membership: &'a MembershipState,
|
||||
) -> impl Iterator<Item = Raw<AnySyncStateEvent>> + 'a {
|
||||
range.map(move |idx| {
|
||||
let user_id = format!("@user_{idx}:{server}");
|
||||
let event_id = format!("$roommember_{batch}_{idx}");
|
||||
let ts = 151800000 + batch * 100 + idx;
|
||||
from_json_value(json!({
|
||||
"content": {
|
||||
"membership": membership,
|
||||
},
|
||||
"event_id": event_id,
|
||||
"origin_server_ts": ts,
|
||||
"sender": user_id,
|
||||
"state_key": user_id,
|
||||
"type": "m.room.member",
|
||||
}))
|
||||
.unwrap()
|
||||
})
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
use ruma::{api::client::sync::sync_events::v3::InvitedRoom, OwnedRoomId};
|
||||
use ruma::{
|
||||
api::client::sync::sync_events::v3::InvitedRoom, events::AnyStrippedStateEvent, serde::Raw,
|
||||
OwnedRoomId,
|
||||
};
|
||||
|
||||
use super::StrippedStateTestEvent;
|
||||
use crate::test_json;
|
||||
@@ -22,6 +25,15 @@ impl InvitedRoomBuilder {
|
||||
self.inner.invite_state.events.push(event.into_raw_event());
|
||||
self
|
||||
}
|
||||
|
||||
/// Add events to the state in bulk.
|
||||
pub fn add_state_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnyStrippedStateEvent>>,
|
||||
{
|
||||
self.inner.invite_state.events.extend(events);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for InvitedRoomBuilder {
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
use ruma::{api::client::sync::sync_events::v3::JoinedRoom, OwnedRoomId};
|
||||
use ruma::{
|
||||
api::client::sync::sync_events::v3::JoinedRoom,
|
||||
events::{
|
||||
AnyRoomAccountDataEvent, AnySyncEphemeralRoomEvent, AnySyncRoomEvent, AnySyncStateEvent,
|
||||
},
|
||||
serde::Raw,
|
||||
OwnedRoomId,
|
||||
};
|
||||
use serde_json::{from_value as from_json_value, Value as JsonValue};
|
||||
|
||||
use super::{EphemeralTestEvent, RoomAccountDataTestEvent, StateTestEvent, TimelineTestEvent};
|
||||
@@ -24,6 +31,27 @@ impl JoinedRoomBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add events in bulk to the timeline.
|
||||
pub fn add_timeline_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncRoomEvent>>,
|
||||
{
|
||||
self.inner.timeline.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add state events in bulk to the timeline.
|
||||
///
|
||||
/// This is a convenience method that casts `Raw<AnySyncStateEvent>` to
|
||||
/// `Raw<AnySyncRoomEvent>` and calls `JoinedRoom::add_timeline_bulk()`.
|
||||
pub fn add_timeline_state_bulk<I>(self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncStateEvent>>,
|
||||
{
|
||||
let events = events.into_iter().map(|event| event.cast());
|
||||
self.add_timeline_bulk(events)
|
||||
}
|
||||
|
||||
/// Set the timeline as limited.
|
||||
pub fn set_timeline_limited(mut self) -> Self {
|
||||
self.inner.timeline.limited = true;
|
||||
@@ -42,18 +70,45 @@ impl JoinedRoomBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add events in bulk to the state.
|
||||
pub fn add_state_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncStateEvent>>,
|
||||
{
|
||||
self.inner.state.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add an ephemeral event.
|
||||
pub fn add_ephemeral_event(mut self, event: EphemeralTestEvent) -> Self {
|
||||
self.inner.ephemeral.events.push(event.into_raw_event());
|
||||
self
|
||||
}
|
||||
|
||||
/// Add ephemeral events in bulk.
|
||||
pub fn add_ephemeral_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncEphemeralRoomEvent>>,
|
||||
{
|
||||
self.inner.ephemeral.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add room account data.
|
||||
pub fn add_account_data(mut self, event: RoomAccountDataTestEvent) -> Self {
|
||||
self.inner.account_data.events.push(event.into_raw_event());
|
||||
self
|
||||
}
|
||||
|
||||
/// Add room account data in bulk.
|
||||
pub fn add_account_data_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnyRoomAccountDataEvent>>,
|
||||
{
|
||||
self.inner.account_data.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the room summary.
|
||||
pub fn set_room_summary(mut self, summary: JsonValue) -> Self {
|
||||
self.inner.summary = from_json_value(summary).unwrap();
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
use ruma::{api::client::sync::sync_events::v3::LeftRoom, OwnedRoomId};
|
||||
use ruma::{
|
||||
api::client::sync::sync_events::v3::LeftRoom,
|
||||
events::{AnyRoomAccountDataEvent, AnySyncRoomEvent, AnySyncStateEvent},
|
||||
serde::Raw,
|
||||
OwnedRoomId,
|
||||
};
|
||||
|
||||
use super::{RoomAccountDataTestEvent, StateTestEvent, TimelineTestEvent};
|
||||
use crate::test_json;
|
||||
@@ -23,6 +28,27 @@ impl LeftRoomBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add events in bulk to the timeline.
|
||||
pub fn add_timeline_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncRoomEvent>>,
|
||||
{
|
||||
self.inner.timeline.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add state events in bulk to the timeline.
|
||||
///
|
||||
/// This is a convenience method that casts `Raw<AnySyncStateEvent>` to
|
||||
/// `Raw<AnySyncRoomEvent>` and calls `LeftRoom::add_timeline_bulk()`.
|
||||
pub fn add_timeline_state_bulk<I>(self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncStateEvent>>,
|
||||
{
|
||||
let events = events.into_iter().map(|event| event.cast());
|
||||
self.add_timeline_bulk(events)
|
||||
}
|
||||
|
||||
/// Set the timeline as limited.
|
||||
pub fn set_timeline_limited(mut self) -> Self {
|
||||
self.inner.timeline.limited = true;
|
||||
@@ -41,11 +67,29 @@ impl LeftRoomBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add events in bulk to the state.
|
||||
pub fn add_state_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnySyncStateEvent>>,
|
||||
{
|
||||
self.inner.state.events.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add room account data.
|
||||
pub fn add_account_data(mut self, event: RoomAccountDataTestEvent) -> Self {
|
||||
self.inner.account_data.events.push(event.into_raw_event());
|
||||
self
|
||||
}
|
||||
|
||||
/// Add room account data in bulk.
|
||||
pub fn add_account_data_bulk<I>(mut self, events: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnyRoomAccountDataEvent>>,
|
||||
{
|
||||
self.inner.account_data.events.extend(events);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for LeftRoomBuilder {
|
||||
|
||||
@@ -16,11 +16,13 @@ use serde_json::{from_value as from_json_value, json, Value as JsonValue};
|
||||
|
||||
use super::test_json;
|
||||
|
||||
mod bulk;
|
||||
mod invited_room;
|
||||
mod joined_room;
|
||||
mod left_room;
|
||||
mod test_event;
|
||||
|
||||
pub use bulk::bulk_room_members;
|
||||
pub use invited_room::InvitedRoomBuilder;
|
||||
pub use joined_room::JoinedRoomBuilder;
|
||||
pub use left_room::LeftRoomBuilder;
|
||||
@@ -136,6 +138,15 @@ impl EventBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add presence in bulk.
|
||||
pub fn add_presence_bulk<I>(&mut self, events: I) -> &mut Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<PresenceEvent>>,
|
||||
{
|
||||
self.presence.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Add global account data.
|
||||
pub fn add_global_account_data_event(
|
||||
&mut self,
|
||||
@@ -151,6 +162,15 @@ impl EventBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Add global account data in bulk.
|
||||
pub fn add_global_account_data_bulk<I>(&mut self, events: I) -> &mut Self
|
||||
where
|
||||
I: IntoIterator<Item = Raw<AnyGlobalAccountDataEvent>>,
|
||||
{
|
||||
self.account_data.extend(events);
|
||||
self
|
||||
}
|
||||
|
||||
/// Builds a sync response as a JSON Value containing the events we queued
|
||||
/// so far.
|
||||
///
|
||||
|
||||
@@ -9,9 +9,9 @@ mod event_builder;
|
||||
pub mod test_json;
|
||||
|
||||
pub use event_builder::{
|
||||
EphemeralTestEvent, EventBuilder, GlobalAccountDataTestEvent, InvitedRoomBuilder,
|
||||
JoinedRoomBuilder, LeftRoomBuilder, PresenceTestEvent, RoomAccountDataTestEvent,
|
||||
StateTestEvent, StrippedStateTestEvent, TimelineTestEvent,
|
||||
bulk_room_members, EphemeralTestEvent, EventBuilder, GlobalAccountDataTestEvent,
|
||||
InvitedRoomBuilder, JoinedRoomBuilder, LeftRoomBuilder, PresenceTestEvent,
|
||||
RoomAccountDataTestEvent, StateTestEvent, StrippedStateTestEvent, TimelineTestEvent,
|
||||
};
|
||||
|
||||
/// Embedded sync response files
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use std::time::Duration;
|
||||
|
||||
use matrix_sdk::{config::SyncSettings, DisplayName, RoomMember};
|
||||
use matrix_sdk_test::{async_test, test_json};
|
||||
use matrix_sdk_test::{
|
||||
async_test, bulk_room_members, test_json, EventBuilder, JoinedRoomBuilder, TimelineTestEvent,
|
||||
};
|
||||
use ruma::{
|
||||
event_id,
|
||||
events::{AnySyncStateEvent, StateEventType},
|
||||
events::{room::member::MembershipState, AnySyncStateEvent, StateEventType},
|
||||
room_id,
|
||||
};
|
||||
use serde_json::{json, Value as JsonValue};
|
||||
use serde_json::json;
|
||||
use wiremock::{
|
||||
matchers::{header, method, path_regex},
|
||||
Mock, ResponseTemplate,
|
||||
@@ -361,92 +363,26 @@ async fn room_timeline() {
|
||||
}
|
||||
|
||||
#[async_test]
|
||||
async fn room_permalink() {
|
||||
fn sync_response(index: u8, room_timeline_events: &[JsonValue]) -> JsonValue {
|
||||
json!({
|
||||
"device_one_time_keys_count": {},
|
||||
"next_batch": format!("s526_47314_0_7_1_1_1_11444_{}", index + 1),
|
||||
"device_lists": {
|
||||
"changed": [],
|
||||
"left": []
|
||||
},
|
||||
"account_data": {
|
||||
"events": []
|
||||
},
|
||||
"rooms": {
|
||||
"invite": {},
|
||||
"join": {
|
||||
"!test_room:127.0.0.1": {
|
||||
"summary": {},
|
||||
"account_data": {
|
||||
"events": []
|
||||
},
|
||||
"ephemeral": {
|
||||
"events": []
|
||||
},
|
||||
"state": {
|
||||
"events": []
|
||||
},
|
||||
"timeline": {
|
||||
"events": room_timeline_events,
|
||||
"limited": false,
|
||||
"prev_batch": format!("s526_47314_0_7_1_1_1_11444_{}", index - 1),
|
||||
},
|
||||
"unread_notifications": {
|
||||
"highlight_count": 0,
|
||||
"notification_count": 0,
|
||||
}
|
||||
}
|
||||
},
|
||||
"leave": {}
|
||||
},
|
||||
"to_device": {
|
||||
"events": []
|
||||
},
|
||||
"presence": {
|
||||
"events": []
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn room_member_events(nb: usize, server: &str) -> Vec<JsonValue> {
|
||||
let mut events = Vec::with_capacity(nb);
|
||||
for i in 0..nb {
|
||||
let id = format!("${server}{i}");
|
||||
let user = format!("@user{i}:{server}");
|
||||
events.push(json!({
|
||||
"content": {
|
||||
"membership": "join",
|
||||
},
|
||||
"event_id": id,
|
||||
"origin_server_ts": 151800140,
|
||||
"sender": user,
|
||||
"state_key": user,
|
||||
"type": "m.room.member",
|
||||
}))
|
||||
}
|
||||
events
|
||||
}
|
||||
|
||||
async fn room_route() {
|
||||
let (client, server) = logged_in_client().await;
|
||||
let mut ev_builder = EventBuilder::new();
|
||||
let room_id = room_id!("!test_room:127.0.0.1");
|
||||
|
||||
// Without elligible server
|
||||
let mut sync_index = 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[
|
||||
json!({
|
||||
ev_builder.add_joined_room(
|
||||
JoinedRoomBuilder::new(room_id)
|
||||
.add_timeline_event(TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"creator": "@creator:127.0.0.1",
|
||||
"room_version": "6",
|
||||
},
|
||||
"event_id": "$151957878228ekrDs",
|
||||
"origin_server_ts": 15195787,
|
||||
"sender": "@creator:localhost",
|
||||
"sender": "@creator:127.0.0.1",
|
||||
"state_key": "",
|
||||
"type": "m.room.create",
|
||||
}),
|
||||
json!({
|
||||
})))
|
||||
.add_timeline_event(TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"membership": "join",
|
||||
},
|
||||
@@ -455,110 +391,79 @@ async fn room_permalink() {
|
||||
"sender": "@creator:127.0.0.1",
|
||||
"state_key": "@creator:127.0.0.1",
|
||||
"type": "m.room.member",
|
||||
}),
|
||||
],
|
||||
}))),
|
||||
);
|
||||
mock_sync(&server, res, None).await;
|
||||
client.sync_once(SyncSettings::new()).await.unwrap();
|
||||
let room = client.get_room(room_id!("!test_room:127.0.0.1")).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(true).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?action=join"
|
||||
);
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), None).await;
|
||||
client.sync_once(SyncSettings::new()).await.unwrap();
|
||||
let room = client.get_room(room_id).unwrap();
|
||||
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 0);
|
||||
|
||||
// With a single elligible server
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
"content": {
|
||||
"membership": "join",
|
||||
},
|
||||
"event_id": "$151800140517rfvjc",
|
||||
"origin_server_ts": 151800140,
|
||||
"sender": "@example:localhost",
|
||||
"state_key": "@example:localhost",
|
||||
"type": "m.room.member",
|
||||
})],
|
||||
);
|
||||
let mut batch = 0;
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_state_bulk(
|
||||
bulk_room_members(batch, 0..1, "localhost", &MembershipState::Join),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=localhost"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 1);
|
||||
assert_eq!(route[0], "localhost");
|
||||
|
||||
// With two elligible servers
|
||||
sync_index += 1;
|
||||
let res = sync_response(sync_index, &room_member_events(15, "notarealhs"));
|
||||
batch += 1;
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_state_bulk(
|
||||
bulk_room_members(batch, 0..15, "notarealhs", &MembershipState::Join),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=notarealhs&via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=notarealhs&via=localhost"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 2);
|
||||
assert_eq!(route[0], "notarealhs");
|
||||
assert_eq!(route[1], "localhost");
|
||||
|
||||
// With three elligible servers
|
||||
sync_index += 1;
|
||||
let res = sync_response(sync_index, &room_member_events(5, "mymatrix"));
|
||||
batch += 1;
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_state_bulk(
|
||||
bulk_room_members(batch, 0..5, "mymatrix", &MembershipState::Join),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=notarealhs&via=mymatrix&via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=notarealhs&via=mymatrix&via=localhost"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 3);
|
||||
assert_eq!(route[0], "notarealhs");
|
||||
assert_eq!(route[1], "mymatrix");
|
||||
assert_eq!(route[2], "localhost");
|
||||
|
||||
// With four elligible servers
|
||||
sync_index += 1;
|
||||
let res = sync_response(sync_index, &room_member_events(10, "yourmatrix"));
|
||||
batch += 1;
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_state_bulk(
|
||||
bulk_room_members(batch, 0..10, "yourmatrix", &MembershipState::Join),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=notarealhs&via=yourmatrix&via=mymatrix"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=notarealhs&via=yourmatrix&via=mymatrix"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 3);
|
||||
assert_eq!(route[0], "notarealhs");
|
||||
assert_eq!(route[1], "yourmatrix");
|
||||
assert_eq!(route[2], "mymatrix");
|
||||
|
||||
// With power levels
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"users": {
|
||||
"@example:localhost": 50,
|
||||
"@user_0:localhost": 50,
|
||||
},
|
||||
},
|
||||
"event_id": "$15139375512JaHAW",
|
||||
@@ -566,30 +471,25 @@ async fn room_permalink() {
|
||||
"sender": "@creator:127.0.0.1",
|
||||
"state_key": "",
|
||||
"type": "m.room.power_levels",
|
||||
})],
|
||||
);
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=localhost&via=notarealhs&via=yourmatrix"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=localhost&via=notarealhs&via=yourmatrix"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 3);
|
||||
assert_eq!(route[0], "localhost");
|
||||
assert_eq!(route[1], "notarealhs");
|
||||
assert_eq!(route[2], "yourmatrix");
|
||||
|
||||
// With higher power levels
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"users": {
|
||||
"@example:localhost": 50,
|
||||
"@user0:mymatrix": 70,
|
||||
"@user_0:localhost": 50,
|
||||
"@user_2:mymatrix": 70,
|
||||
},
|
||||
},
|
||||
"event_id": "$15139375512JaHAZ",
|
||||
@@ -597,26 +497,21 @@ async fn room_permalink() {
|
||||
"sender": "@creator:127.0.0.1",
|
||||
"state_key": "",
|
||||
"type": "m.room.power_levels",
|
||||
})],
|
||||
);
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=mymatrix&via=notarealhs&via=yourmatrix"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=mymatrix&via=notarealhs&via=yourmatrix"
|
||||
);
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 3);
|
||||
assert_eq!(route[0], "mymatrix");
|
||||
assert_eq!(route[1], "notarealhs");
|
||||
assert_eq!(route[2], "yourmatrix");
|
||||
|
||||
// With server ACLs
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"allow": ["*"],
|
||||
"allow_ip_literals": true,
|
||||
@@ -627,38 +522,69 @@ async fn room_permalink() {
|
||||
"sender": "@creator:127.0.0.1",
|
||||
"state_key": "",
|
||||
"type": "m.room.server_acl",
|
||||
})],
|
||||
);
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
let route = room.route().await.unwrap();
|
||||
assert_eq!(route.len(), 3);
|
||||
assert_eq!(route[0], "mymatrix");
|
||||
assert_eq!(route[1], "yourmatrix");
|
||||
assert_eq!(route[2], "localhost");
|
||||
}
|
||||
|
||||
#[async_test]
|
||||
async fn room_permalink() {
|
||||
let (client, server) = logged_in_client().await;
|
||||
let mut ev_builder = EventBuilder::new();
|
||||
let room_id = room_id!("!test_room:127.0.0.1");
|
||||
|
||||
// Without aliases
|
||||
ev_builder.add_joined_room(
|
||||
JoinedRoomBuilder::new(room_id)
|
||||
.add_timeline_state_bulk(bulk_room_members(
|
||||
0,
|
||||
0..1,
|
||||
"localhost",
|
||||
&MembershipState::Join,
|
||||
))
|
||||
.add_timeline_state_bulk(bulk_room_members(
|
||||
1,
|
||||
0..5,
|
||||
"notarealhs",
|
||||
&MembershipState::Join,
|
||||
)),
|
||||
);
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), None).await;
|
||||
client.sync_once(SyncSettings::new()).await.unwrap();
|
||||
let room = client.get_room(room_id).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_permalink().await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=mymatrix&via=yourmatrix&via=localhost"
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1?via=notarealhs&via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_permalink(false).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1?via=mymatrix&via=yourmatrix&via=localhost"
|
||||
"matrix:roomid/test_room:127.0.0.1?via=notarealhs&via=localhost"
|
||||
);
|
||||
|
||||
// With an alternative alias
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"alt_aliases": ["#alias:localhost"],
|
||||
},
|
||||
"event_id": "$15139375513VdeRF",
|
||||
"origin_server_ts": 151393755,
|
||||
"sender": "@example:localhost",
|
||||
"sender": "@user_0:localhost",
|
||||
"state_key": "",
|
||||
"type": "m.room.canonical_alias",
|
||||
})],
|
||||
);
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
@@ -668,23 +594,21 @@ async fn room_permalink() {
|
||||
assert_eq!(room.matrix_permalink(false).await.unwrap().to_string(), "matrix:r/alias:localhost");
|
||||
|
||||
// With a canonical alias
|
||||
sync_index += 1;
|
||||
let res = sync_response(
|
||||
sync_index,
|
||||
&[json!({
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"alias": "#canonical:localhost",
|
||||
"alt_aliases": ["#alias:localhost"],
|
||||
},
|
||||
"event_id": "$15139375513VdeRF",
|
||||
"origin_server_ts": 151393755,
|
||||
"sender": "@example:localhost",
|
||||
"sender": "@user_0:localhost",
|
||||
"state_key": "",
|
||||
"type": "m.room.canonical_alias",
|
||||
})],
|
||||
);
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, res, Some(sync_token.clone())).await;
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
@@ -699,14 +623,68 @@ async fn room_permalink() {
|
||||
room.matrix_permalink(true).await.unwrap().to_string(),
|
||||
"matrix:r/canonical:localhost?action=join"
|
||||
);
|
||||
}
|
||||
|
||||
#[async_test]
|
||||
async fn room_event_permalink() {
|
||||
let (client, server) = logged_in_client().await;
|
||||
let mut ev_builder = EventBuilder::new();
|
||||
let room_id = room_id!("!test_room:127.0.0.1");
|
||||
let event_id = event_id!("$15139375512JaHAW");
|
||||
|
||||
// Without aliases
|
||||
ev_builder.add_joined_room(
|
||||
JoinedRoomBuilder::new(room_id)
|
||||
.add_timeline_state_bulk(bulk_room_members(
|
||||
0,
|
||||
0..1,
|
||||
"localhost",
|
||||
&MembershipState::Join,
|
||||
))
|
||||
.add_timeline_state_bulk(bulk_room_members(
|
||||
1,
|
||||
0..5,
|
||||
"notarealhs",
|
||||
&MembershipState::Join,
|
||||
)),
|
||||
);
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), None).await;
|
||||
client.sync_once(SyncSettings::new()).await.unwrap();
|
||||
let room = client.get_room(room_id).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_event_permalink(event_id).await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1/%2415139375512JaHAW?via=mymatrix&via=yourmatrix&via=localhost"
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1/%2415139375512JaHAW?via=notarealhs&via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_event_permalink(event_id).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1/e/15139375512JaHAW?via=mymatrix&via=yourmatrix&via=localhost"
|
||||
"matrix:roomid/test_room:127.0.0.1/e/15139375512JaHAW?via=notarealhs&via=localhost"
|
||||
);
|
||||
|
||||
// Adding an alias doesn't change anything
|
||||
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
|
||||
TimelineTestEvent::Custom(json!({
|
||||
"content": {
|
||||
"alias": "#canonical:localhost",
|
||||
"alt_aliases": ["#alias:localhost"],
|
||||
},
|
||||
"event_id": "$15139375513VdeRF",
|
||||
"origin_server_ts": 151393755,
|
||||
"sender": "@user_0:localhost",
|
||||
"state_key": "",
|
||||
"type": "m.room.canonical_alias",
|
||||
})),
|
||||
));
|
||||
let sync_token = client.sync_token().await.unwrap();
|
||||
mock_sync(&server, ev_builder.build_json_sync_response(), Some(sync_token.clone())).await;
|
||||
client.sync_once(SyncSettings::new().token(sync_token)).await.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
room.matrix_to_event_permalink(event_id).await.unwrap().to_string(),
|
||||
"https://matrix.to/#/%21test_room%3A127.0.0.1/%2415139375512JaHAW?via=notarealhs&via=localhost"
|
||||
);
|
||||
assert_eq!(
|
||||
room.matrix_event_permalink(event_id).await.unwrap().to_string(),
|
||||
"matrix:roomid/test_room:127.0.0.1/e/15139375512JaHAW?via=notarealhs&via=localhost"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user