From 561db87b649c752cb79c915657f5dcb8e692105d Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 19 Oct 2023 14:27:58 +0200 Subject: [PATCH] widget: Add integration tests for sending events --- crates/matrix-sdk/tests/integration/widget.rs | 85 ++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/crates/matrix-sdk/tests/integration/widget.rs b/crates/matrix-sdk/tests/integration/widget.rs index be8baaf72..f9b774936 100644 --- a/crates/matrix-sdk/tests/integration/widget.rs +++ b/crates/matrix-sdk/tests/integration/widget.rs @@ -35,7 +35,7 @@ use wiremock::{ Mock, MockServer, ResponseTemplate, }; -use crate::{logged_in_client, mock_sync}; +use crate::{logged_in_client, mock_encryption_state, mock_sync}; /// Create a JSON string from a [`json!`][serde_json::json] "literal". #[macro_export] @@ -67,6 +67,8 @@ async fn run_test_driver(init_on_content_load: bool) -> (MockServer, WidgetDrive let _response = client.sync_once(sync_settings.clone()).await.unwrap(); mock_server.reset().await; + mock_encryption_state(&mock_server, false).await; + let room = client.get_room(&ROOM_ID).unwrap(); let (driver, handle) = WidgetDriver::new( @@ -287,6 +289,87 @@ async fn read_room_members() { } } +#[async_test] +async fn send_room_message() { + let (mock_server, driver_handle) = run_test_driver(false).await; + + negotiate_capabilities(&driver_handle, json!(["org.matrix.msc2762.send.event:m.room.message"])) + .await; + + Mock::given(method("PUT")) + .and(path_regex(r"^/_matrix/client/r0/rooms/.*/send/m.room.message/.*$")) + .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "event_id": "$foobar" }))) + .expect(1) + .mount(&mock_server) + .await; + + send_request( + &driver_handle, + "send-room-message", + "send_event", + json!({ + "type": "m.room.message", + "content": { + "msgtype": "m.text", + "body": "Message from a widget!", + }, + }), + ) + .await; + + // Receive the response + let msg = recv_message(&driver_handle).await; + assert_eq!(msg["api"], "fromWidget"); + assert_eq!(msg["action"], "send_event"); + let event_id = msg["response"]["event_id"].as_str().unwrap(); + assert_eq!(event_id, "$foobar"); + + // Make sure the event-sending endpoint was hit exactly once + mock_server.verify().await; +} + +#[async_test] +async fn send_room_name() { + let (mock_server, driver_handle) = run_test_driver(false).await; + + negotiate_capabilities( + &driver_handle, + json!(["org.matrix.msc2762.send.state_event:m.room.name#"]), + ) + .await; + + Mock::given(method("PUT")) + .and(path_regex(r"^/_matrix/client/r0/rooms/.*/state/m.room.name/?$")) + .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "event_id": "$foobar" }))) + .expect(1) + .mount(&mock_server) + .await; + + send_request( + &driver_handle, + "send-room-name", + "send_event", + json!({ + "type": "m.room.name", + "state_key": "", + "content": { + "name": "Room Name set by Widget", + }, + }), + ) + .await; + + // Receive the response + let msg = recv_message(&driver_handle).await; + assert_eq!(msg["api"], "fromWidget"); + assert_eq!(msg["action"], "send_event"); + let event_id = msg["response"]["event_id"].as_str().unwrap(); + assert_eq!(event_id, "$foobar"); + + // Make sure the event-sending endpoint was hit exactly once + mock_server.verify().await; +} + async fn negotiate_capabilities(driver_handle: &WidgetDriverHandle, caps: JsonValue) { { // Receive toWidget capabilities request