From 89a617f9679c8bd1b9e00014b2a8dcb77ad166f1 Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Wed, 30 Jul 2025 15:20:35 -0400 Subject: [PATCH] Workflow change --- .github/workflows/workflow.yml | 2 +- src/main.rs | 107 ++++++++++++++++++++++++++++++--- 2 files changed, 100 insertions(+), 9 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index d13914b..20cb1bd 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -68,7 +68,7 @@ jobs: env: ROOT_DIRECTORY: "/tmp" DATABASE_URL: "postgres://${{ secrets.POSTGRES_USER }}:${{ secrets.POSTGRES_PASSWORD }}@localhost:5432/${{ secrets.POSTGRES_DB }}" - run: cargo test --verbose -- --test-threads=1 + run: cargo test --verbose -- - name: Run clippy run: cargo clippy -- -D warnings diff --git a/src/main.rs b/src/main.rs index 88f7c7b..6d2ca81 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1862,7 +1862,7 @@ mod tests { let app = super::init::app(pool).await; - let (id, _, _) = test_data::song_id().await.unwrap(); + let (id, _, _, _) = test_data::song_id().await.unwrap(); let uri = format!("{}?id={id}", crate::callers::endpoints::GETSONGS); @@ -1950,10 +1950,10 @@ mod tests { } pub mod test_data { - pub async fn song_id() -> Result<(uuid::Uuid, String, String), uuid::Error> { + pub async fn song_id() -> Result<(uuid::Uuid, String, String, String), uuid::Error> { match uuid::Uuid::parse_str("44cf7940-34ff-489f-9124-d0ec90a55af9") { Ok(id) => { - Ok((id, String::from("tests/I/track01.flac"), String::from("tests/I/Coverart-1.jpg"))) + Ok((id, String::from("tests/I/"), String::from("track01.flac"), String::from("tests/I/Coverart-1.jpg"))) } Err(err) => { Err(err) @@ -1961,10 +1961,10 @@ mod tests { } } - pub async fn other_song_id() -> Result<(uuid::Uuid, String, String), uuid::Error> { + pub async fn other_song_id() -> Result<(uuid::Uuid, String, String, String), uuid::Error> { match uuid::Uuid::parse_str("94cf7940-34ff-489f-9124-d0ec90a55af4") { Ok(id) => { - Ok((id, String::from("tests/I/track02.flac"), String::from("tests/I/Coverart-2.jpg"))) + Ok((id, String::from("tests/I/"), String::from("track02.flac"), String::from("tests/I/Coverart-2.jpg"))) } Err(err) => { Err(err) @@ -1996,7 +1996,7 @@ mod tests { let app = super::init::app(pool).await; - let (id, _, _) = test_data::song_id().await.unwrap(); + let (id, _, _, _) = test_data::song_id().await.unwrap(); let my_url = crate::callers::endpoints::STREAMSONG; let last = my_url.len() - 5; @@ -2052,7 +2052,7 @@ mod tests { let app = super::init::app(pool).await; - let (id, _, _) = test_data::song_id().await.unwrap(); + let (id, _, _, _) = test_data::song_id().await.unwrap(); let uri = super::format_url_with_value(crate::callers::endpoints::DOWNLOADSONG, &id).await; @@ -2144,6 +2144,88 @@ mod tests { let _ = super::db_mgr::drop_database(&tm_pool, &db_name).await; } + async fn get_test_data(song_directory: &String, song_filename: &String, coverart_path: &String) -> Result<(Vec, Vec), std::io::Error> { + let song = icarus_models::song::Song { + directory: song_directory.clone(), + filename: song_filename.clone(), + ..Default::default() + }; + + let coverart = icarus_models::coverart::CoverArt { + path: coverart_path.clone(), + ..Default::default() + }; + + match song.to_data() { + Ok(song_data) => match coverart.to_data() { + Ok(coverart_data) => { + Ok((song_data, coverart_data)) + } + Err(err) => { + Err(err) + } + } + Err(err) => { + Err(err) + } + } + } + + async fn save_test_again(song_directory: &String, song_filename: &String, song_data: Vec, coverart_path: &String, coverart_data: Vec) -> Result<(), std::io::Error> { + let song = icarus_models::song::Song { + directory: song_directory.clone(), + filename: song_filename.clone(), + ..Default::default() + }; + + let coverart = icarus_models::coverart::CoverArt { + path: coverart_path.clone(), + ..Default::default() + }; + + use std::io::Write; + + match song.song_path() { + Ok(song_path) => { + let song_p = std::path::Path::new(&song_path); + match std::fs::File::create(song_p) { + Ok(mut song_file) => { + match song_file.write_all(&song_data) { + Ok(_) => { + } + Err(err) => { + return Err(err); + } + } + } + Err(err) => { + return Err(err); + } + } + } + Err(err) => { + return Err(err); + } + } + + let coverart_p = std::path::Path::new(&coverart.path); + match std::fs::File::create(coverart_p) { + Ok(mut coverart_file) => { + match coverart_file.write_all(&coverart_data) { + Ok(_) => { + Ok(()) + } + Err(err) => { + Err(err) + } + } + } + Err(err) => { + Err(err) + } + } + } + #[tokio::test] async fn test_last_delete_song() { let tm_pool = super::db_mgr::get_pool().await.unwrap(); @@ -2163,7 +2245,8 @@ mod tests { let app = super::init::app(pool).await; - let (id, song_path, coverart_path) = test_data::other_song_id().await.unwrap(); + let (id, song_directory, song_filename, coverart_path) = test_data::other_song_id().await.unwrap(); + let (song_data, coverart_data) = get_test_data(&song_directory, &song_filename, &coverart_path).await.unwrap(); let uri = super::format_url_with_value(crate::callers::endpoints::DELETESONG, &id).await; @@ -2192,6 +2275,14 @@ mod tests { "Song Ids do not match {id:?} {:?}", song_and_coverart.song.id ); + + match save_test_again(&song_directory, &song_filename, song_data, &coverart_path, coverart_data).await { + Ok(_) => { + } + Err(err) => { + assert!(false, "Error: {err:?}"); + } + } } Err(err) => { assert!(false, "Error: {err:?}");