From 37e07ea331a73bf2946def9339ed964f3fae38ff Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Tue, 29 Jul 2025 12:15:33 +0200 Subject: [PATCH] refactor(test): use the matrix mock server in `test_notification_client_with_context` --- .../tests/integration/notification_client.rs | 66 +++++++------------ 1 file changed, 22 insertions(+), 44 deletions(-) diff --git a/crates/matrix-sdk-ui/tests/integration/notification_client.rs b/crates/matrix-sdk-ui/tests/integration/notification_client.rs index 7c9bc59cd..b817f7c8a 100644 --- a/crates/matrix-sdk-ui/tests/integration/notification_client.rs +++ b/crates/matrix-sdk-ui/tests/integration/notification_client.rs @@ -1,7 +1,6 @@ use std::{ collections::BTreeMap, sync::{Arc, Mutex}, - time::Duration, }; use assert_matches::assert_matches; @@ -40,44 +39,30 @@ use crate::{ #[async_test] async fn test_notification_client_with_context() { - let room_id = room_id!("!a98sd12bjh:example.org"); - let (client, server) = logged_in_client_with_server().await; + let server = MatrixMockServer::new().await; + let client = server.client_builder().build().await; - let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); + let sender = user_id!("@user:example.org"); + let room_id = room_id!("!a98sd12bjh:example.org"); + let f = EventFactory::new().room(room_id).sender(sender); let content = "Hello world!"; let event_id = event_id!("$example_event_id"); - let server_ts = 152049794; - let sender = user_id!("@user:example.org"); + let event = f.text_msg(content).event_id(event_id).server_ts(152049794).into_event(); + let sender_display_name = "John Mastodon"; let sender_avatar_url = mxc_uri!("mxc://example.org/avatar"); - let event_factory = EventFactory::new().room(room_id).sender(sender); - let event_json = - event_factory.text_msg(content).event_id(event_id).server_ts(server_ts).into_raw_sync(); - - let sender_member_event = event_factory + let sender_member_event = f .member(sender) .membership(MembershipState::Join) .display_name(sender_display_name) .avatar_url(sender_avatar_url) .into_raw_timeline(); - let mut sync_builder = SyncResponseBuilder::new(); - sync_builder.add_joined_room( - JoinedRoomBuilder::new(room_id).add_timeline_event( - event_factory - .text_msg(content) - .event_id(event_id) - .server_ts(server_ts) - .sender(sender) - .into_raw_sync(), - ), - ); - // First, mock a sync that contains a text message. - mock_sync(&server, sync_builder.build_json_sync_response(), None).await; - let _response = client.sync_once(sync_settings.clone()).await.unwrap(); - server.reset().await; + server + .sync_room(&client, JoinedRoomBuilder::new(room_id).add_timeline_event(event.raw().clone())) + .await; // Then, try to simulate receiving a notification for that message. let dummy_sync_service = Arc::new(SyncService::builder(client.clone()).build().await.unwrap()); @@ -85,33 +70,26 @@ async fn test_notification_client_with_context() { NotificationProcessSetup::SingleProcess { sync_service: dummy_sync_service }; let notification_client = NotificationClient::new(client, process_setup).await.unwrap(); - { - // The notification client retrieves the event via `/rooms/*/context/`. - Mock::given(method("GET")) - .and(path(format!("/_matrix/client/r0/rooms/{room_id}/context/{event_id}"))) - .and(header("authorization", "Bearer 1234")) - .respond_with(ResponseTemplate::new(200).set_body_json(json!({ - "event": event_json, - "state": [sender_member_event] - }))) - .mount(&server) - .await; + // The notification client retrieves the event via `/rooms/*/context/`. + server + .mock_room_event_context() + .ok(event, "", "", vec![sender_member_event.cast_unchecked()]) + .mock_once() + .mount() + .await; - // The encryption state is also fetched to figure whether the room is encrypted - // or not. - mock_encryption_state(&server, false).await; - } + // The encryption state is also fetched to figure whether the room is encrypted + // or not. + server.mock_room_state_encryption().plain().mount().await; let item = notification_client.get_notification_with_context(room_id, event_id).await.unwrap(); - server.reset().await; - assert_let!(NotificationStatus::Event(item) = item); assert_matches!(item.event, NotificationEvent::Timeline(event) => { assert_eq!(event.event_type(), TimelineEventType::RoomMessage); }); - assert_eq!(item.sender_display_name.as_deref(), Some("John Mastodon")); + assert_eq!(item.sender_display_name.as_deref(), Some(sender_display_name)); assert_eq!(item.sender_avatar_url, Some(sender_avatar_url.to_string())); }