Skip to content

Commit e011f5f

Browse files
chore: Add upload tests
1 parent 92c6499 commit e011f5f

File tree

1 file changed

+76
-1
lines changed

1 file changed

+76
-1
lines changed

plugins/upload/src/lib.rs

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ mod tests {
196196
}
197197

198198
#[tokio::test]
199-
async fn should_error_if_status_not_success() {
199+
async fn should_error_on_download_if_status_not_success() {
200200
let mocked_server = spawn_server_mocked(400).await;
201201
let result = download_file(&mocked_server.url).await;
202202
mocked_server.mocked_endpoint.assert();
@@ -215,6 +215,51 @@ mod tests {
215215
);
216216
}
217217

218+
#[tokio::test]
219+
async fn should_error_on_upload_if_status_not_success() {
220+
let mocked_server = spawn_upload_server_mocked(500).await;
221+
let result = upload_file(&mocked_server.url).await;
222+
mocked_server.mocked_endpoint.assert();
223+
assert!(result.is_err());
224+
match result.unwrap_err() {
225+
Error::HttpErrorCode(status, _) => assert_eq!(status, 500),
226+
_ => panic!("Expected HttpErrorCode error"),
227+
}
228+
}
229+
230+
#[tokio::test]
231+
async fn should_error_on_upload_if_file_not_found() {
232+
let mocked_server = spawn_upload_server_mocked(200).await;
233+
let file_path = "/nonexistent/file.txt";
234+
let headers = HashMap::new();
235+
let sender: Channel<ProgressPayload> =
236+
Channel::new(|msg: InvokeResponseBody| -> tauri::Result<()> {
237+
let _ = msg;
238+
Ok(())
239+
});
240+
241+
let result = upload(&mocked_server.url, file_path, headers, sender).await;
242+
assert!(result.is_err());
243+
match result.unwrap_err() {
244+
Error::Io(_) => {} // Expected IO error for missing file
245+
_ => panic!("Expected IO error for missing file"),
246+
}
247+
}
248+
249+
#[tokio::test]
250+
async fn should_upload_file_successfully() {
251+
let mocked_server = spawn_upload_server_mocked(200).await;
252+
let result = upload_file(&mocked_server.url).await;
253+
mocked_server.mocked_endpoint.assert();
254+
assert!(
255+
result.is_ok(),
256+
"failed to upload file: {}",
257+
result.unwrap_err()
258+
);
259+
let response_body = result.unwrap();
260+
assert_eq!(response_body, "upload successful");
261+
}
262+
218263
async fn download_file(url: &str) -> Result<()> {
219264
let file_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test/test.txt");
220265
let headers = HashMap::new();
@@ -226,6 +271,17 @@ mod tests {
226271
download(url, file_path, headers, None, sender).await
227272
}
228273

274+
async fn upload_file(url: &str) -> Result<String> {
275+
let file_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test/test.txt");
276+
let headers = HashMap::new();
277+
let sender: Channel<ProgressPayload> =
278+
Channel::new(|msg: InvokeResponseBody| -> tauri::Result<()> {
279+
let _ = msg;
280+
Ok(())
281+
});
282+
upload(url, file_path, headers, sender).await
283+
}
284+
229285
async fn spawn_server_mocked(return_status: usize) -> MockedServer {
230286
let mut _server = Server::new_async().await;
231287
let path = "/mock_test";
@@ -243,4 +299,23 @@ mod tests {
243299
mocked_endpoint: mock,
244300
}
245301
}
302+
303+
async fn spawn_upload_server_mocked(return_status: usize) -> MockedServer {
304+
let mut _server = Server::new_async().await;
305+
let path = "/upload_test";
306+
let mock = _server
307+
.mock("POST", path)
308+
.with_status(return_status)
309+
.with_body("upload successful")
310+
.match_header("content-length", "20") // test.txt file size
311+
.create_async()
312+
.await;
313+
314+
let url = _server.url() + path;
315+
MockedServer {
316+
_server,
317+
url,
318+
mocked_endpoint: mock,
319+
}
320+
}
246321
}

0 commit comments

Comments
 (0)