From 87c344a803aafb470b6ed7644b9a9f6623244172 Mon Sep 17 00:00:00 2001 From: Matthew Richardson Date: Wed, 16 Jul 2025 10:53:29 +0100 Subject: [PATCH] chore: Add upload tests --- plugins/upload/src/lib.rs | 77 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/plugins/upload/src/lib.rs b/plugins/upload/src/lib.rs index fd9eb026..cf5815b2 100644 --- a/plugins/upload/src/lib.rs +++ b/plugins/upload/src/lib.rs @@ -196,7 +196,7 @@ mod tests { } #[tokio::test] - async fn should_error_if_status_not_success() { + async fn should_error_on_download_if_status_not_success() { let mocked_server = spawn_server_mocked(400).await; let result = download_file(&mocked_server.url).await; mocked_server.mocked_endpoint.assert(); @@ -215,6 +215,51 @@ mod tests { ); } + #[tokio::test] + async fn should_error_on_upload_if_status_not_success() { + let mocked_server = spawn_upload_server_mocked(500).await; + let result = upload_file(&mocked_server.url).await; + mocked_server.mocked_endpoint.assert(); + assert!(result.is_err()); + match result.unwrap_err() { + Error::HttpErrorCode(status, _) => assert_eq!(status, 500), + _ => panic!("Expected HttpErrorCode error"), + } + } + + #[tokio::test] + async fn should_error_on_upload_if_file_not_found() { + let mocked_server = spawn_upload_server_mocked(200).await; + let file_path = "/nonexistent/file.txt"; + let headers = HashMap::new(); + let sender: Channel = + Channel::new(|msg: InvokeResponseBody| -> tauri::Result<()> { + let _ = msg; + Ok(()) + }); + + let result = upload(&mocked_server.url, file_path, headers, sender).await; + assert!(result.is_err()); + match result.unwrap_err() { + Error::Io(_) => {} + _ => panic!("Expected IO error for missing file"), + } + } + + #[tokio::test] + async fn should_upload_file_successfully() { + let mocked_server = spawn_upload_server_mocked(200).await; + let result = upload_file(&mocked_server.url).await; + mocked_server.mocked_endpoint.assert(); + assert!( + result.is_ok(), + "failed to upload file: {}", + result.unwrap_err() + ); + let response_body = result.unwrap(); + assert_eq!(response_body, "upload successful"); + } + async fn download_file(url: &str) -> Result<()> { let file_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test/test.txt"); let headers = HashMap::new(); @@ -226,6 +271,17 @@ mod tests { download(url, file_path, headers, None, sender).await } + async fn upload_file(url: &str) -> Result { + let file_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test/test.txt"); + let headers = HashMap::new(); + let sender: Channel = + Channel::new(|msg: InvokeResponseBody| -> tauri::Result<()> { + let _ = msg; + Ok(()) + }); + upload(url, file_path, headers, sender).await + } + async fn spawn_server_mocked(return_status: usize) -> MockedServer { let mut _server = Server::new_async().await; let path = "/mock_test"; @@ -243,4 +299,23 @@ mod tests { mocked_endpoint: mock, } } + + async fn spawn_upload_server_mocked(return_status: usize) -> MockedServer { + let mut _server = Server::new_async().await; + let path = "/upload_test"; + let mock = _server + .mock("POST", path) + .with_status(return_status) + .with_body("upload successful") + .match_header("content-length", "20") + .create_async() + .await; + + let url = _server.url() + path; + MockedServer { + _server, + url, + mocked_endpoint: mock, + } + } }