|
1 | 1 | use std::{
|
2 | 2 | collections::BTreeMap,
|
3 | 3 | sync::{Arc, Mutex},
|
4 |
| - time::Duration, |
5 | 4 | };
|
6 | 5 |
|
7 | 6 | use assert_matches::assert_matches;
|
@@ -40,78 +39,57 @@ use crate::{
|
40 | 39 |
|
41 | 40 | #[async_test]
|
42 | 41 | async fn test_notification_client_with_context() {
|
43 |
| - let room_id = room_id!("!a98sd12bjh:example.org"); |
44 |
| - let (client, server) = logged_in_client_with_server().await; |
| 42 | + let server = MatrixMockServer::new().await; |
| 43 | + let client = server.client_builder().build().await; |
45 | 44 |
|
46 |
| - let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); |
| 45 | + let sender = user_id!("@user:example.org"); |
| 46 | + let room_id = room_id!("!a98sd12bjh:example.org"); |
| 47 | + let f = EventFactory::new().room(room_id).sender(sender); |
47 | 48 |
|
48 | 49 | let content = "Hello world!";
|
49 | 50 | let event_id = event_id!("$example_event_id");
|
50 |
| - let server_ts = 152049794; |
51 |
| - let sender = user_id!("@user:example.org"); |
| 51 | + let event = f.text_msg(content).event_id(event_id).server_ts(152049794).into_event(); |
| 52 | + |
52 | 53 | let sender_display_name = "John Mastodon";
|
53 | 54 | let sender_avatar_url = mxc_uri!("mxc://example.org/avatar");
|
54 |
| - let event_factory = EventFactory::new().room(room_id).sender(sender); |
55 |
| - let event_json = |
56 |
| - event_factory.text_msg(content).event_id(event_id).server_ts(server_ts).into_raw_sync(); |
57 |
| - |
58 |
| - let sender_member_event = event_factory |
| 55 | + let sender_member_event = f |
59 | 56 | .member(sender)
|
60 | 57 | .membership(MembershipState::Join)
|
61 | 58 | .display_name(sender_display_name)
|
62 | 59 | .avatar_url(sender_avatar_url)
|
63 | 60 | .into_raw_timeline();
|
64 | 61 |
|
65 |
| - let mut sync_builder = SyncResponseBuilder::new(); |
66 |
| - sync_builder.add_joined_room( |
67 |
| - JoinedRoomBuilder::new(room_id).add_timeline_event( |
68 |
| - event_factory |
69 |
| - .text_msg(content) |
70 |
| - .event_id(event_id) |
71 |
| - .server_ts(server_ts) |
72 |
| - .sender(sender) |
73 |
| - .into_raw_sync(), |
74 |
| - ), |
75 |
| - ); |
76 |
| - |
77 | 62 | // First, mock a sync that contains a text message.
|
78 |
| - mock_sync(&server, sync_builder.build_json_sync_response(), None).await; |
79 |
| - let _response = client.sync_once(sync_settings.clone()).await.unwrap(); |
80 |
| - server.reset().await; |
| 63 | + server |
| 64 | + .sync_room(&client, JoinedRoomBuilder::new(room_id).add_timeline_event(event.raw().clone())) |
| 65 | + .await; |
81 | 66 |
|
82 | 67 | // Then, try to simulate receiving a notification for that message.
|
83 | 68 | let dummy_sync_service = Arc::new(SyncService::builder(client.clone()).build().await.unwrap());
|
84 | 69 | let process_setup =
|
85 | 70 | NotificationProcessSetup::SingleProcess { sync_service: dummy_sync_service };
|
86 | 71 | let notification_client = NotificationClient::new(client, process_setup).await.unwrap();
|
87 | 72 |
|
88 |
| - { |
89 |
| - // The notification client retrieves the event via `/rooms/*/context/`. |
90 |
| - Mock::given(method("GET")) |
91 |
| - .and(path(format!("/_matrix/client/r0/rooms/{room_id}/context/{event_id}"))) |
92 |
| - .and(header("authorization", "Bearer 1234")) |
93 |
| - .respond_with(ResponseTemplate::new(200).set_body_json(json!({ |
94 |
| - "event": event_json, |
95 |
| - "state": [sender_member_event] |
96 |
| - }))) |
97 |
| - .mount(&server) |
98 |
| - .await; |
| 73 | + // The notification client retrieves the event via `/rooms/*/context/`. |
| 74 | + server |
| 75 | + .mock_room_event_context() |
| 76 | + .ok(event, "", "", vec![sender_member_event.cast_unchecked()]) |
| 77 | + .mock_once() |
| 78 | + .mount() |
| 79 | + .await; |
99 | 80 |
|
100 |
| - // The encryption state is also fetched to figure whether the room is encrypted |
101 |
| - // or not. |
102 |
| - mock_encryption_state(&server, false).await; |
103 |
| - } |
| 81 | + // The encryption state is also fetched to figure whether the room is encrypted |
| 82 | + // or not. |
| 83 | + server.mock_room_state_encryption().plain().mount().await; |
104 | 84 |
|
105 | 85 | let item = notification_client.get_notification_with_context(room_id, event_id).await.unwrap();
|
106 | 86 |
|
107 |
| - server.reset().await; |
108 |
| - |
109 | 87 | assert_let!(NotificationStatus::Event(item) = item);
|
110 | 88 |
|
111 | 89 | assert_matches!(item.event, NotificationEvent::Timeline(event) => {
|
112 | 90 | assert_eq!(event.event_type(), TimelineEventType::RoomMessage);
|
113 | 91 | });
|
114 |
| - assert_eq!(item.sender_display_name.as_deref(), Some("John Mastodon")); |
| 92 | + assert_eq!(item.sender_display_name.as_deref(), Some(sender_display_name)); |
115 | 93 | assert_eq!(item.sender_avatar_url, Some(sender_avatar_url.to_string()));
|
116 | 94 | }
|
117 | 95 |
|
|
0 commit comments