treefmt v2.5.0traversed 21 files emitted 10 files for processing formatted 10 files (1 changed) in 216ms M src/handlers.rs diff --git a/src/handlers.rs b/src/handlers.rs index ea193db..6fdf8b0 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -3,7 +3,9 @@ use std::time::Duration; use mxlink::matrix_sdk::deserialized_responses::{TimelineEvent, TimelineEventKind}; use mxlink::matrix_sdk::ruma::events::OriginalSyncMessageLikeEvent; +use mxlink::matrix_sdk::ruma::events::relation::{Reply, Thread}; use mxlink::matrix_sdk::ruma::events::room::message::MessageType; +use mxlink::matrix_sdk::ruma::events::room::message::Relation; use mxlink::matrix_sdk::{ Room, ruma::{ @@ -21,8 +23,6 @@ use mxlink::matrix_sdk::{ }, }; use mxlink::{CallbackError, MessageResponseType}; -use mxlink::matrix_sdk::ruma::events::room::message::Relation; -use mxlink::matrix_sdk::ruma::events::relation::{Reply, Thread}; use scraper::{Html, Selector}; use tokio::sync::RwLock; use tokio::time::timeout; @@ -75,10 +75,7 @@ impl BotCommand { } } -fn apply_response_type( - content: &mut RoomMessageEventContent, - response_type: MessageResponseType, -) { +fn apply_response_type(content: &mut RoomMessageEventContent, response_type: MessageResponseType) { match response_type { MessageResponseType::InRoom => {} MessageResponseType::Reply(event_id) => { @@ -105,11 +102,7 @@ fn apply_response_type( /// /// This function does not return a meaningful value (`()`). /// -async fn clone_and_respond( - cloner: &Cloner, - room: &Room, - link: &GitHubLink, -) { +async fn clone_and_respond(cloner: &Cloner, room: &Room, link: &GitHubLink) { // Wait for up to 10 seconds for the clone to complete let clone_timeout = 10; let long_clone_timeout = Duration::from_secs(clone_timeout); @@ -398,11 +391,7 @@ pub async fn handle_github_links_in_message( /// - `text` (`String`) - Content of the message in text or markdown. /// - `response_type` (`MessageResponseType`) - The response type. /// -async fn send_room_message_or_log( - room: &Room, - text: String, - response_type: MessageResponseType, -) { +async fn send_room_message_or_log(room: &Room, text: String, response_type: MessageResponseType) { let mut content = RoomMessageEventContent::text_markdown(text); apply_response_type(&mut content, response_type); if let Err(e) = room.send(content).await { @@ -443,12 +432,7 @@ async fn respond_to_whitelist( "Internal error".to_string() } }; - send_room_message_or_log( - room, - response_text, - MessageResponseType::Reply(event_id), - ) - .await; + send_room_message_or_log(room, response_text, MessageResponseType::Reply(event_id)).await; } /// Get the user mentioned in an HTML string. @@ -753,11 +737,9 @@ mod tests { // Tests for extract_original_link // --------------------------------------------------------------------------- - use mxlink::matrix_sdk::deserialized_responses::{ - TimelineEvent, - }; use matrix_sdk_test::event_factory::EventFactory; - use mxlink::matrix_sdk::ruma::{room_id, user_id, event_id, owned_user_id}; + use mxlink::matrix_sdk::deserialized_responses::TimelineEvent; + use mxlink::matrix_sdk::ruma::{event_id, owned_user_id, room_id, user_id}; /// Create a `TimelineEvent` with a plain text message event whose body starts /// with `MESSAGE_PREFIX` and contains the given GitHub link. @@ -778,12 +760,8 @@ mod tests { crate::handlers::MESSAGE_PREFIX ); let timeline = make_message_timeline_event(&body); - let link = extract_original_link(timeline) - .expect("extract_original_link should succeed"); - assert_eq!( - link.to_string(), - "https://github.com/octocat/Hello-World" - ); + let link = extract_original_link(timeline).expect("extract_original_link should succeed"); + assert_eq!(link.to_string(), "https://github.com/octocat/Hello-World"); } #[test] @@ -820,25 +798,32 @@ mod tests { use crate::cloner::Cloner; use crate::githublink::GitHubLink; use mxlink::matrix_sdk::{ - test_utils::mocks::MatrixMockServer, - ruma::events::room::message::RoomMessageEventContent, + ruma::events::room::message::RoomMessageEventContent, test_utils::mocks::MatrixMockServer, }; + use std::sync::OnceLock; use url::Url; use wiremock::{ Mock, ResponseTemplate, matchers::{method, path}, }; - use std::sync::OnceLock; /// Set up a Matrix client synced with a joined room. /// Returns (client, `MatrixMockServer`, room) tuple. async fn setup_matrix_room( room_id: &mxlink::matrix_sdk::ruma::RoomId, - ) -> (mxlink::matrix_sdk::Client, MatrixMockServer, mxlink::matrix_sdk::Room) { + ) -> ( + mxlink::matrix_sdk::Client, + MatrixMockServer, + mxlink::matrix_sdk::Room, + ) { let mock_server = MatrixMockServer::new().await; let client = mock_server.client_builder().build().await; - mock_server.mock_room_state_encryption().plain().mount().await; + mock_server + .mock_room_state_encryption() + .plain() + .mount() + .await; let room = mock_server.sync_joined_room(&client, room_id).await; (client, mock_server, room) @@ -862,12 +847,8 @@ mod tests { } fn make_cloner(forgejo_url: &str) -> Cloner { - Cloner::new( - Url::parse(forgejo_url).unwrap(), - "test-token", - "test-org", - ) - .expect("Failed to create Cloner") + Cloner::new(Url::parse(forgejo_url).unwrap(), "test-token", "test-org") + .expect("Failed to create Cloner") } fn mock_forgejo_repo_json(html_url: Option<&str>) -> serde_json::Value { @@ -924,15 +905,21 @@ mod tests { "test-org", "octocat-Hello-World", 200, - mock_forgejo_repo_json(Some("https://forgejo.example.com/test-org/octocat-Hello-World")), - ).await; + mock_forgejo_repo_json(Some( + "https://forgejo.example.com/test-org/octocat-Hello-World", + )), + ) + .await; let cloner = make_cloner(&forgejo.uri()); let link = GitHubLink::try_from("https://github.com/octocat/Hello-World").unwrap(); let event = make_room_message_event(); let result = process_link_content(&link, &cloner, &event, &room).await; - assert!(result.is_ok(), "process_link_content should succeed when already cloned"); + assert!( + result.is_ok(), + "process_link_content should succeed when already cloned" + ); } #[tokio::test] @@ -947,14 +934,18 @@ mod tests { "octocat-Hello-World", 500, serde_json::json!({"message": "Internal Server Error"}), - ).await; + ) + .await; let cloner = make_cloner(&forgejo.uri()); let link = GitHubLink::try_from("https://github.com/octocat/Hello-World").unwrap(); let event = make_room_message_event(); let result = process_link_content(&link, &cloner, &event, &room).await; - assert!(result.is_ok(), "process_link_content should handle Forgejo errors gracefully"); + assert!( + result.is_ok(), + "process_link_content should handle Forgejo errors gracefully" + ); } #[tokio::test] @@ -972,10 +963,11 @@ mod tests { "octocat-Hello-World", 404, serde_json::json!({"message": "not found"}), - ).await; + ) + .await; let github_server = wiremock::MockServer::start().await; - + INIT_CRYPTO.get_or_init(|| { let _ = rustls::crypto::ring::default_provider().install_default(); }); @@ -1003,7 +995,10 @@ mod tests { let event = make_room_message_event(); let result = process_link_content(&link, &cloner, &event, &room).await; - assert!(result.is_ok(), "process_link_content should succeed when GitHub repo not found"); + assert!( + result.is_ok(), + "process_link_content should succeed when GitHub repo not found" + ); } // --------------------------------------------------------------------------- @@ -1012,9 +1007,7 @@ mod tests { use tokio::sync::mpsc; - async fn make_test_bot_context( - clone_queue: mpsc::Sender, - ) -> BotContext { + async fn make_test_bot_context(clone_queue: mpsc::Sender) -> BotContext { let forgejo = wiremock::MockServer::start().await; let cloner = Cloner::new( Url::parse(&format!("{}/", forgejo.uri())).unwrap(), @@ -1045,7 +1038,8 @@ mod tests { let (tx, mut rx) = mpsc::channel::(1); let ctx = make_test_bot_context(tx).await; - let text_content = TextMessageEventContent::plain("!clone https://github.com/octocat/Hello-World"); + let text_content = + TextMessageEventContent::plain("!clone https://github.com/octocat/Hello-World"); let event_id = event_id!("$clone_event:localhost"); handle_clone_command(&ctx, event_id.to_owned(), &room, &text_content).await; @@ -1067,12 +1061,17 @@ mod tests { let (tx, mut rx) = mpsc::channel::(1); let ctx = make_test_bot_context(tx).await; - let text_content = TextMessageEventContent::plain("!clone https://github.com/a/b and https://github.com/c/d"); + let text_content = TextMessageEventContent::plain( + "!clone https://github.com/a/b and https://github.com/c/d", + ); let event_id = event_id!("$clone_event:localhost"); handle_clone_command(&ctx, event_id.to_owned(), &room, &text_content).await; let request = rx.try_recv(); - assert!(request.is_err(), "No clone request should be queued for multiple links"); + assert!( + request.is_err(), + "No clone request should be queued for multiple links" + ); } }