diff --git a/Cargo.lock b/Cargo.lock index e92d082..e906045 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -964,7 +964,7 @@ dependencies = [ [[package]] name = "icarus" -version = "0.3.17" +version = "0.3.18" dependencies = [ "axum", "axum-extra", diff --git a/Cargo.toml b/Cargo.toml index b97d6f4..9e1af66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus" -version = "0.3.17" +version = "0.3.18" edition = "2024" rust-version = "1.90" diff --git a/src/main.rs b/src/main.rs index 3e2c0a2..e028386 100644 --- a/src/main.rs +++ b/src/main.rs @@ -328,16 +328,15 @@ pub async fn root() -> &'static str { #[cfg(test)] mod tests { - use crate::db; - use std::io::Write; - use std::usize; use common_multipart_rfc7578::client::multipart::{ Body as MultipartBody, Form as MultipartForm, }; use tower::ServiceExt; + use crate::db; + mod db_mgr { use std::str::FromStr; @@ -423,6 +422,27 @@ mod tests { } } + mod util { + pub async fn resp_to_bytes( + response: axum::response::Response, + ) -> Result { + axum::body::to_bytes(response.into_body(), std::usize::MAX).await + } + + pub async fn get_resp_data(response: axum::response::Response) -> Data + where + Data: for<'a> serde::Deserialize<'a>, + { + let body = resp_to_bytes(response).await.unwrap(); + serde_json::from_slice(&body).unwrap() + } + + pub async fn format_url_with_value(endpoint: &str, value: &uuid::Uuid) -> String { + let last = endpoint.len() - 5; + format!("{}/{value}", &endpoint[0..last]) + } + } + pub fn token_fields() -> (String, String, String) { ( String::from("What a twist!"), @@ -701,7 +721,7 @@ mod tests { ) -> Result<(axum::response::Response, uuid::Uuid), std::convert::Infallible> { match super::song_queue_req(&app).await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -714,7 +734,7 @@ mod tests { match super::song_queue_link_req(&app, &song_queue_id, &user_id).await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::song::response::link_user_id::Response, >(response) .await; @@ -726,7 +746,7 @@ mod tests { match super::queue_metadata_req(&app, &song_queue_id).await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -755,7 +775,7 @@ mod tests { ) -> Result { match super::upload_coverart_queue_req(&app).await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -771,7 +791,7 @@ mod tests { .await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::coverart::response::link::Response, >(response) .await; @@ -798,7 +818,7 @@ mod tests { ) -> Result<(axum::response::Response, uuid::Uuid), std::convert::Infallible> { match queue_song_flow(&app).await { Ok((song_response, user_id)) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(song_response) .await; @@ -807,7 +827,7 @@ mod tests { match super::create_song_req(&app, &song_queue_id, &user_id).await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::song::response::create_metadata::Response, >(response) .await; @@ -850,27 +870,6 @@ mod tests { } } - // TODO: Put this in a util module - pub async fn resp_to_bytes( - response: axum::response::Response, - ) -> Result { - axum::body::to_bytes(response.into_body(), usize::MAX).await - } - - // TODO: Put this in a util module - pub async fn get_resp_data(response: axum::response::Response) -> Data - where - Data: for<'a> serde::Deserialize<'a>, - { - let body = resp_to_bytes(response).await.unwrap(); - serde_json::from_slice(&body).unwrap() - } - - pub async fn format_url_with_value(endpoint: &str, value: &uuid::Uuid) -> String { - let last = endpoint.len() - 5; - format!("{}/{value}", &endpoint[0..last]) - } - // TODO: Change the name of the function to be more expressive and put into it's own module pub mod payload_data { pub async fn queue_metadata_payload_data(song_queue_id: &uuid::Uuid) -> serde_json::Value { @@ -936,7 +935,7 @@ mod tests { // Send request match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -972,7 +971,7 @@ mod tests { match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -985,7 +984,7 @@ mod tests { match song_queue_link_req(&app, &song_queue_id, &user_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::link_user_id::Response, >(response) .await; @@ -1037,7 +1036,7 @@ mod tests { match sequence_flow::queue_song_and_coverart_flow(&app).await { Ok((resp_one, song_queue_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::fetch_coverart_no_data::Response, >(resp_one) .await; @@ -1050,7 +1049,7 @@ mod tests { match update_song_queue_status_req(&app, &song_queue_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::update_status::Response, >(response) .await; @@ -1065,7 +1064,7 @@ mod tests { match fetch_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::fetch_queue_song::Response, >(response) .await; @@ -1111,7 +1110,7 @@ mod tests { // Send request match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -1121,7 +1120,7 @@ mod tests { let id = &resp.data[0]; match fetch_queue_data_req(&app, &id).await { - Ok(response) => match resp_to_bytes(response).await { + Ok(response) => match util::resp_to_bytes(response).await { Ok(bytes) => { assert_eq!(false, bytes.is_empty(), "Queued data should not be empty"); @@ -1180,7 +1179,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::update_song_queue::Response, >(response) .await; @@ -1237,7 +1236,7 @@ mod tests { // Send request match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -1246,7 +1245,7 @@ mod tests { let id = resp.data[0]; match fetch_queue_data_req(&app, &id).await { - Ok(response) => match resp_to_bytes(response).await { + Ok(response) => match util::resp_to_bytes(response).await { Ok(bytes) => { assert_eq!(false, bytes.is_empty(), "Queued data should not be empty"); } @@ -1288,7 +1287,7 @@ mod tests { match sequence_flow::queue_song_and_coverart_flow(&app).await { Ok((resp_one, song_queue_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::fetch_coverart_no_data::Response, >(resp_one) .await; @@ -1301,7 +1300,7 @@ mod tests { match update_song_queue_status_req(&app, &song_queue_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::update_status::Response, >(response) .await; @@ -1346,7 +1345,7 @@ mod tests { // Send request match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -1355,7 +1354,7 @@ mod tests { match queue_metadata_req(&app, &resp.data[0]).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::song::response::song_queue::Response, >(response) .await; @@ -1396,7 +1395,7 @@ mod tests { // Send request match sequence_flow::queue_song_flow(&app).await { Ok((response, _user_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(response) .await; @@ -1432,7 +1431,7 @@ mod tests { // Send request match upload_coverart_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1469,7 +1468,7 @@ mod tests { match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1480,7 +1479,7 @@ mod tests { // Send request match upload_coverart_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1492,7 +1491,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::link::Response, >(response) .await; @@ -1546,7 +1545,7 @@ mod tests { match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1556,7 +1555,7 @@ mod tests { match sequence_flow::queue_coverart_flow(&app, &song_queue_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::fetch_coverart_no_data::Response, >(response) .await; @@ -1596,7 +1595,7 @@ mod tests { match song_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1607,7 +1606,7 @@ mod tests { // Send request match upload_coverart_queue_req(&app).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::queue::Response, >(response) .await; @@ -1619,7 +1618,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::link::Response, >(response) .await; @@ -1661,7 +1660,7 @@ mod tests { ) .await { - Ok(response) => match resp_to_bytes(response).await { + Ok(response) => match util::resp_to_bytes(response).await { Ok(bytes) => { assert_eq!( false, @@ -1727,7 +1726,7 @@ mod tests { // Send request match sequence_flow::queue_song_flow(&app).await { Ok((response, user_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(response) .await; @@ -1736,7 +1735,7 @@ mod tests { match create_song_req(&app, &song_q_id, &user_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::song::response::create_metadata::Response, >(response) .await; @@ -1790,7 +1789,7 @@ mod tests { // Send request match sequence_flow::queue_song_flow(&app).await { Ok((response, user_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(response) .await; @@ -1799,7 +1798,7 @@ mod tests { match create_song_req(&app, &song_queue_id, &user_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::song::response::create_metadata::Response, >(response) .await; @@ -1820,7 +1819,7 @@ mod tests { match sequence_flow::queue_coverart_flow(&app, &song_queue_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::fetch_coverart_no_data::Response, >(response) .await; @@ -1831,7 +1830,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::coverart::response::create_coverart::Response, >(response) .await; @@ -1883,7 +1882,7 @@ mod tests { // Send request match sequence_flow::queue_song_flow(&app).await { Ok((response, user_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(response) .await; @@ -1892,7 +1891,7 @@ mod tests { match create_song_req(&app, &song_q_id, &user_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::song::response::create_metadata::Response, >(response) .await; @@ -1929,7 +1928,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::(response).await; + let resp = util::get_resp_data::(response).await; assert_eq!( false, resp.data.is_empty(), @@ -1989,7 +1988,7 @@ mod tests { match sequence_flow::queue_song_flow(&app).await { Ok((response, user_id)) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::metadata::response::fetch_metadata::Response, >(response) .await; @@ -1998,7 +1997,7 @@ mod tests { match create_song_req(&app, &song_queue_id, &user_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::song::response::create_metadata::Response, >(response) .await; @@ -2021,7 +2020,7 @@ mod tests { match sequence_flow::queue_coverart_flow(&app, &song_queue_id).await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::fetch_coverart_no_data::Response, >(response) .await; @@ -2053,7 +2052,7 @@ mod tests { .await { Ok(response) => { - let resp = get_resp_data::< + let resp = util::get_resp_data::< crate::callers::queue::coverart::response::wipe_data_from_coverart_queue::Response, >(response) .await; @@ -2130,7 +2129,7 @@ mod tests { .await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::song::response::get_songs::Response, >(response) .await; @@ -2187,7 +2186,7 @@ mod tests { .await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::coverart::response::get_coverart::Response, >(response) .await; @@ -2316,7 +2315,8 @@ mod tests { let (id, _, _, _) = test_data::song_id().await.unwrap(); let uri = - super::format_url_with_value(crate::callers::endpoints::DOWNLOADSONG, &id).await; + super::util::format_url_with_value(crate::callers::endpoints::DOWNLOADSONG, &id) + .await; match app .clone() @@ -2374,9 +2374,11 @@ mod tests { let id = test_data::coverart_id().await.unwrap(); - let uri = - super::format_url_with_value(crate::callers::endpoints::DOWNLOADCOVERART, &id) - .await; + let uri = super::util::format_url_with_value( + crate::callers::endpoints::DOWNLOADCOVERART, + &id, + ) + .await; match app .clone() @@ -2502,7 +2504,8 @@ mod tests { .unwrap(); let uri = - super::format_url_with_value(crate::callers::endpoints::DELETESONG, &id).await; + super::util::format_url_with_value(crate::callers::endpoints::DELETESONG, &id) + .await; match app .clone() @@ -2520,7 +2523,7 @@ mod tests { .await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::song::response::delete_song::Response, >(response) .await; @@ -2593,7 +2596,7 @@ mod tests { .await { Ok(response) => { - let resp = super::get_resp_data::< + let resp = super::util::get_resp_data::< crate::callers::song::response::get_songs::Response, >(response) .await;