Skip to content

Commit e8070df

Browse files
committed
test: add basic integration test for the common path
1 parent bc453c3 commit e8070df

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ use wiremock::{
2828

2929
#[cfg(feature = "experimental-encryption-sync")]
3030
mod encryption_sync;
31+
#[cfg(feature = "experimental-notification-client")]
32+
mod notification_client;
3133
#[cfg(feature = "experimental-room-list")]
3234
mod room_list_service;
3335
mod sliding_sync;
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use std::time::Duration;
2+
3+
use matrix_sdk::config::SyncSettings;
4+
use matrix_sdk_test::{async_test, EventBuilder, JoinedRoomBuilder, TimelineTestEvent};
5+
use matrix_sdk_ui::notification_client::NotificationClient;
6+
use ruma::{event_id, events::TimelineEventType, room_id, user_id};
7+
use serde_json::json;
8+
use wiremock::{
9+
matchers::{header, method, path, path_regex},
10+
Mock, ResponseTemplate,
11+
};
12+
13+
use crate::{logged_in_client, mock_encryption_state, mock_sync};
14+
15+
#[async_test]
16+
async fn test_notification_client_simple() {
17+
let room_id = room_id!("!a98sd12bjh:example.org");
18+
let (client, server) = logged_in_client().await;
19+
20+
let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));
21+
22+
let event_id = event_id!("$example_event_id");
23+
let sender = user_id!("@user:example.org");
24+
let event_json = json!({
25+
"content": {
26+
"body": "Hello world!",
27+
"msgtype": "m.text",
28+
},
29+
"room_id": room_id.clone(),
30+
"event_id": event_id,
31+
"origin_server_ts": 152049794,
32+
"sender": sender.clone(),
33+
"type": "m.room.message",
34+
});
35+
36+
let mut ev_builder = EventBuilder::new();
37+
ev_builder.add_joined_room(
38+
JoinedRoomBuilder::new(room_id.clone())
39+
.add_timeline_event(TimelineTestEvent::Custom(event_json.clone())),
40+
);
41+
42+
mock_sync(&server, ev_builder.build_json_sync_response(), None).await;
43+
let _response = client.sync_once(sync_settings.clone()).await.unwrap();
44+
server.reset().await;
45+
46+
let notification_client = NotificationClient::builder(client).build();
47+
48+
{
49+
Mock::given(method("GET"))
50+
.and(path(format!("/_matrix/client/r0/rooms/{room_id}/event/{event_id}")))
51+
.and(header("authorization", "Bearer 1234"))
52+
.respond_with(ResponseTemplate::new(200).set_body_json(event_json))
53+
.mount(&server)
54+
.await;
55+
56+
Mock::given(method("GET"))
57+
.and(path_regex(r"^/_matrix/client/r0/rooms/.*/members"))
58+
.and(header("authorization", "Bearer 1234"))
59+
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
60+
"chunk": [
61+
{
62+
"content": {
63+
"avatar_url": null,
64+
"displayname": "John Mastodon",
65+
"membership": "join"
66+
},
67+
"room_id": room_id.clone(),
68+
"event_id": "$151800140517rfvjc:example.org",
69+
"membership": "join",
70+
"origin_server_ts": 151800140,
71+
"sender": sender.clone(),
72+
"state_key": sender,
73+
"type": "m.room.member",
74+
"unsigned": {
75+
"age": 2970366,
76+
}
77+
}
78+
]
79+
})))
80+
.mount(&server)
81+
.await;
82+
83+
mock_encryption_state(&server, false).await;
84+
}
85+
86+
let item = notification_client.get_notification(room_id, event_id).await.unwrap();
87+
88+
server.reset().await;
89+
90+
let item = item.expect("the notification should be found");
91+
92+
assert_eq!(item.event.event_type(), TimelineEventType::RoomMessage);
93+
assert_eq!(item.sender_display_name.as_deref(), Some("John Mastodon"));
94+
}

0 commit comments

Comments
 (0)