Skip to content

Commit e6dc109

Browse files
committed
tests: add helper to delay a room /messages response
This removes a few manual uses of `ResponseTemplate`, which is sweet and guarantees some better typing for those responses overall.
1 parent c456356 commit e6dc109

File tree

3 files changed

+33
-38
lines changed

3 files changed

+33
-38
lines changed

crates/matrix-sdk-ui/tests/integration/room_list_service.rs

+6-12
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ use futures_util::{pin_mut, FutureExt, StreamExt};
66
use matrix_sdk::{
77
config::RequestConfig,
88
test_utils::{
9-
logged_in_client_with_server, mocks::MatrixMockServer, set_client_session,
10-
test_client_builder,
9+
logged_in_client_with_server,
10+
mocks::{MatrixMockServer, RoomMessagesResponse},
11+
set_client_session, test_client_builder,
1112
},
1213
Client,
1314
};
@@ -2845,16 +2846,9 @@ async fn test_multiple_timeline_init() {
28452846
// Send back-pagination responses with a small delay.
28462847
server
28472848
.mock_room_messages()
2848-
.respond_with(
2849-
ResponseTemplate::new(200)
2850-
.set_body_json(json!({
2851-
"start": "unused-start",
2852-
"end": null,
2853-
"chunk": vec![f.text_msg("hello").into_raw_timeline()],
2854-
"state": [],
2855-
}))
2856-
.set_delay(Duration::from_millis(500)),
2857-
)
2849+
.ok(RoomMessagesResponse::default()
2850+
.events(vec![f.text_msg("hello").into_raw_timeline()])
2851+
.delayed(Duration::from_millis(500)))
28582852
.mount()
28592853
.await;
28602854

crates/matrix-sdk/src/test_utils/mocks.rs

+17-2
Original file line numberDiff line numberDiff line change
@@ -1896,12 +1896,18 @@ impl<'a> MockEndpoint<'a, RoomMessagesEndpoint> {
18961896
/// Note: pass `chunk` in the correct order: topological for forward
18971897
/// pagination, reverse topological for backwards pagination.
18981898
pub fn ok(self, response: RoomMessagesResponse) -> MatrixMock<'a> {
1899-
let mock = self.mock.respond_with(ResponseTemplate::new(200).set_body_json(json!({
1899+
let mut template = ResponseTemplate::new(200).set_body_json(json!({
19001900
"start": response.start,
19011901
"end": response.end,
19021902
"chunk": response.chunk,
19031903
"state": response.state,
1904-
})));
1904+
}));
1905+
1906+
if let Some(delay) = response.delay {
1907+
template = template.set_delay(delay);
1908+
}
1909+
1910+
let mock = self.mock.respond_with(template);
19051911
MatrixMock { server: self.server, mock }
19061912
}
19071913
}
@@ -1917,6 +1923,8 @@ pub struct RoomMessagesResponse {
19171923
pub chunk: Vec<Raw<AnyTimelineEvent>>,
19181924
/// The set of state events returned by this query.
19191925
pub state: Vec<Raw<AnyStateEvent>>,
1926+
/// Optional delay to respond to the query.
1927+
pub delay: Option<Duration>,
19201928
}
19211929

19221930
impl RoomMessagesResponse {
@@ -1931,6 +1939,12 @@ impl RoomMessagesResponse {
19311939
self.end = Some(token.into());
19321940
self
19331941
}
1942+
1943+
/// Respond with a given delay to the query.
1944+
pub fn delayed(mut self, delay: Duration) -> Self {
1945+
self.delay = Some(delay);
1946+
self
1947+
}
19341948
}
19351949

19361950
impl Default for RoomMessagesResponse {
@@ -1940,6 +1954,7 @@ impl Default for RoomMessagesResponse {
19401954
end: Default::default(),
19411955
chunk: Default::default(),
19421956
state: Default::default(),
1957+
delay: None,
19431958
}
19441959
}
19451960
}

crates/matrix-sdk/tests/integration/event_cache.rs

+10-24
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use matrix_sdk_test::{
2525
use ruma::{event_id, room_id, user_id};
2626
use serde_json::json;
2727
use tokio::{spawn, sync::broadcast, time::sleep};
28-
use wiremock::ResponseTemplate;
2928

3029
async fn once(
3130
outcome: BackPaginationOutcome,
@@ -642,15 +641,9 @@ async fn test_reset_while_backpaginating() {
642641
server
643642
.mock_room_messages()
644643
.from("first_backpagination")
645-
.respond_with(
646-
ResponseTemplate::new(200)
647-
.set_body_json(json!({
648-
"chunk": vec![f.text_msg("lalala").into_raw_timeline()],
649-
"start": "t392-516_47314_0_7_1_1_1_11444_1",
650-
}))
651-
// This is why we don't use `server.mock_room_messages()`.
652-
.set_delay(Duration::from_millis(500)),
653-
)
644+
.ok(RoomMessagesResponse::default()
645+
.events(vec![f.text_msg("lalala").into_raw_timeline()])
646+
.delayed(Duration::from_millis(500)))
654647
.mock_once()
655648
.mount()
656649
.await;
@@ -1065,20 +1058,13 @@ async fn test_backpaginate_with_no_initial_events() {
10651058
let wait_time = Duration::from_millis(500);
10661059
server
10671060
.mock_room_messages()
1068-
.respond_with(
1069-
ResponseTemplate::new(200)
1070-
.set_body_json(json!({
1071-
"chunk": vec![
1072-
f.text_msg("world").event_id(event_id!("$2")).into_raw_timeline(),
1073-
f.text_msg("hello").event_id(event_id!("$3")).into_raw_timeline(),
1074-
],
1075-
"start": "start-token-unused1",
1076-
"end": "prev_batch"
1077-
}))
1078-
// This is why we don't use `server.mock_room_messages()`.
1079-
// This delay has to be greater than the one used to return the sync response.
1080-
.set_delay(2 * wait_time),
1081-
)
1061+
.ok(RoomMessagesResponse::default()
1062+
.end_token("prev_batch")
1063+
.events(vec![
1064+
f.text_msg("world").event_id(event_id!("$2")).into_raw_timeline(),
1065+
f.text_msg("hello").event_id(event_id!("$3")).into_raw_timeline(),
1066+
])
1067+
.delayed(2 * wait_time))
10821068
.mock_once()
10831069
.mount()
10841070
.await;

0 commit comments

Comments
 (0)