From 9815077924db9bf00dd66dd67ad4156694c04ce8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 22 Mar 2025 15:58:10 -0400 Subject: [PATCH] Added tests --- .gitignore | 1 + Cargo.toml | 1 + src/song.rs | 2 - tests/97h357j59j.flac | Bin 0 -> 13795 bytes tests/song_tests.rs | 166 ++++++++++++++++++++++++++++++++++++++++++ tests/track01.flac | Bin 0 -> 13795 bytes tests/track02.flac | Bin 0 -> 14322 bytes tests/track03.flac | Bin 0 -> 12350 bytes 8 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 tests/97h357j59j.flac create mode 100644 tests/song_tests.rs create mode 100644 tests/track01.flac create mode 100644 tests/track02.flac create mode 100644 tests/track03.flac diff --git a/.gitignore b/.gitignore index ea8c4bf..96ef6c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml index 90b37f5..2e6113e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,4 @@ license = "MIT" serde = { version = "1.0.218", features = ["derive"] } serde_json = { version = "1.0.139" } rand = { version = "0.9" } +tempfile = { version = "3.19.1" } diff --git a/src/song.rs b/src/song.rs index ed62435..13c8aa0 100644 --- a/src/song.rs +++ b/src/song.rs @@ -64,7 +64,6 @@ fn is_dur_not_set(num: &i32) -> bool { *num == 0 } -/* impl Default for Song { fn default() -> Self { Song { @@ -93,7 +92,6 @@ impl Default for Song { } } } -*/ impl Song { pub fn to_metadata_json(&self, pretty: bool) -> Result { diff --git a/tests/97h357j59j.flac b/tests/97h357j59j.flac new file mode 100644 index 0000000000000000000000000000000000000000..b018649c66699a09eb7e75037f1757e0ce559b8a GIT binary patch literal 13795 zcmeI2X;4=88O2{klbX2iC{1Wwh*)I_dMsE z{}*GzqsBTMj@LRnI(z=p(c$Rw@=33yj_xzBjypLZ_K@54Jol|LL%ow81+;Rs=+xHp zXTqbBVuAw)4I32bbiUx>uAYC~OXkK!yQ62%S?&stn-@FRH!?o1gJ&KcmFRW_IfI4< zIEMrT1z97{ABhv7`zxn<9Bja8FDL|^j*KRoAl+T^A*lV-$kxYwQ?Nnaa%Hq~V$~~PHzmTJxxya%d3zUDH zX7Nwzm76}cxJ{$-r3i~(I;uRai^VV3DG&6sxNU{Nd zyeAfSe4?D2VsWSMlirt&wT7WX!k3zIDNxuQI#+2Wsmp&ax_i(k2>ysyCG zSO2X1WvRu!bCl2Fc|UV2AHn-xTcqrV^YmG$JPGIRyGl6|&+E5b`A593|5D|JIFH|l z$~|%3*JmhCgPsH4QyvJt{U<3mVIKqERlbCM{rpYkuFx}JjPg9_J!qWr6YOJfgmNnO z<+T3x5PtFSQ(!mc7Vuk;k8&>jIHb4oUHJ7E?UhHuPea=%Pk`To6&=^$$6+t(pc;M+ z@mKx^dHQ95av}0IysvUQB9+fV?{O=YQ*fT~ z$;#j2yuVIRj=}f5ov7Rm-y0sKd=Yv~h*3TRy(Y#f`$Nx&`O4FwcjQpz{qW;&f|Rer zukXB}91cIfJ3@IB{61-b^4G}2$MPA;2Rk;Xxnr;2PHT)hRZ@(>9ZpQPX_9|!KeRHan zy>Xto2b34!ywRtW>+n2xlk!=-FXn{uWSnPSt#W^ycm59L80Z;WtlSNHFW9D>f_*H^ zRsI(HT9m5n4?P#JQ=SgJmt-qn#6IFSD4)T;mR?p4ho6@HNqH3f7Jox|Km3?*Q~5gl zns`Ck0Y824sd57Rmh^k&ui?iJ&noA^uOIzQ`7-jf{DE=>@|Ju{c?k0O@onYN$m@#7 z%0Z|@Jm!p@lWLL;T%h|FW z9dUFW)H=!baY{{UoMMynbsX$Y*%} z8i=})!XVe9u#Hqk{Q?@@NMjkyLS-9kSQmrQ>Bd?X%2SlKkeWUx@;aCsS-tQ;TQZblYMX(O&L zBb&ALJ?=Lnhe2+G0ynlW>d9z$V=K$xAu8P1#=6*!jyG~yC}AjZBaf96jFva@SxTj- zaif5>^*MUpC}faxaFH2BjQTCybVf1DAPHBQQNp@tjl0g+&O*6~%gorp%BjI^XY6Dt z4aaq6>|$+=$9-q)W{_veL-#Q1gXOh*SqAlTuu|5=1vz>d3#Fqxw49YQS6*AeQhF)} z+sE2Um!nrQ$e)PFRgC&^S;KyoK_6LEHR~c$R(XJhvQb1n$jbR%)^LcW6eo+SVQu-y zDr*_!hhnJj>mpgKeUyb#DyBQe%K2Pud7PybCdNI%+6oqHpJb4e zB!s6J_0|&8dX_Sij< zKM|^%X|(nYY|dOm^H*YX=2}K<8B{mZ8N!xO-CW0r6<~AbdWP^eHfL_2waef_b0f`v z6)rS4(b}PKvbmY&4}_D=3`Xo8Txe!8ge7pHnZ<~;hm*~0hHxdEZ04}~vY@)Th2{7I zR5!P>`sQPE<~EjNZ*0!YWd)yy>Si8G`mm^;&kF8~&6x!(>8aS9S;*?^0T-G@EXQcL z&@5*4J%*Fb5|(2coNR7q1$-zo#{)uw*GDfUG9$L;2-j>%^Fk;K(VEY)tmU8q;T02xkuA=z^Wexjj?J`+Z zHO+rjR(XICYcC=nWC&Nv8V)gH_heBu3}K0^vX<31UrcwH<=9(nd4$!MCC05|IsPEl zKFSL2E2cZflAbEIJkAO}FUCE=l0GcfKFR8PEFnC_a!iw$*0cJ0NRUsn9HS-b4Xofs TPY9EJ%*IYvS~&joyT0|G#2-_X literal 0 HcmV?d00001 diff --git a/tests/song_tests.rs b/tests/song_tests.rs new file mode 100644 index 0000000..4e7161f --- /dev/null +++ b/tests/song_tests.rs @@ -0,0 +1,166 @@ +// use std::fs::{self, File}; +use std::fs; +use std::fs::File; +use std::io::{Read, Write}; +use std::path::Path; + +use tempfile::tempdir; + +use icarus_models::song; +use icarus_models::types; + +fn get_tests_directory() -> String { + String::from(env!("CARGO_MANIFEST_DIR").to_owned() + "/tests/") +} + +fn does_directory_exists(directory: &String) -> bool { + let path = Path::new(directory); + if let Ok(dir_i) = fs::metadata(path) { + dir_i.is_dir() + } else { + false + } +} + +fn extract_data_from_file(filepath: &String) -> Result, std::io::Error> { + match std::fs::File::open(filepath) { + Ok(mut file) => { + let mut buffer: Vec = Vec::new(); + let _ = file.read_to_end(&mut buffer); + Ok(buffer) + } + Err(err) => { + println!("Error: {}", err); + // assert!(false, "Failed to open file: {:?}", err); + // Err(4) + Err(err) + } + } +} + +#[test] +fn test_song_to_data() { + println!("Test"); + let some_val = true; + + println!("Checking if some_val is true"); + assert_eq!(true, some_val); + + println!("Getting track"); + let mut song = song::Song::default(); + song.filename = String::from("track01.flac"); + song.id = 1; + // println!("O ", song.id); + + // let temp_dir = tempdir().expect("Failed to create temp dir"); + + println!("Getting directory"); + /* + song.directory = match temp_dir.path().to_str() { + Some(s) => String::from(s), + None => { String::new() }, + }; + */ + song.directory = get_tests_directory(); + + // assert_eq!(song.directory.is_empty(), false); + assert!( + does_directory_exists(&song.directory), + "Directory does not exist" + ); + + println!("Directory: {}", song.directory); + + match song.song_path() { + Ok(filepath) => { + // let file_result = std::fs::File::open(filepath); + // match file_result { + match extract_data_from_file(&filepath) { + Ok(buffer) => { + // let mut buffer: Vec = Vec::new(); + // let _ = file.read_to_end(&mut buffer); + assert_eq!(buffer.is_empty(), false); + + match song.to_data() { + Ok(song_data) => { + println!("Both files match"); + assert_eq!(buffer, song_data); + } + Err(err) => { + assert!(false, "Error producing song data: {:?}", err); + } + }; + } + Err(err) => { + println!("Error: {}", err); + assert!(false, "Failed to open file: {:?}", err); + } + } + } + Err(err) => { + println!("Error: {}", err); + assert!(false, "Could not get song path: {:?}", err); + } + } +} + +#[test] +fn test_song_path_check() { + let mut song = song::Song::default(); + song.directory = get_tests_directory(); + song.filename = String::from("track01.flac"); + + assert!( + does_directory_exists(&song.directory), + "Directory does not exist" + ); +} + +#[test] +fn test_song_generate_filename() { + let mut song = song::Song::default(); + song.directory = get_tests_directory(); + song.filename = String::from("track01.flac"); + + match song.song_path() { + Ok(songpath) => match extract_data_from_file(&songpath) { + Ok(buffer) => { + let mut song_cpy = song.clone(); + let temp_dir = tempdir().expect("Failed to create temp dir"); + song_cpy.directory = match temp_dir.path().to_str() { + Some(s) => String::from(s), + None => String::new(), + }; + + assert_eq!(song.directory.is_empty(), false); + // song_cpy.directory = String::from(temp_dir.path().to_str()); + song_cpy.filename = song.generate_filename(types::MusicTypes::FlacExtension, true); + println!("Directory: {:?}", song_cpy.directory); + println!("File to be created: {:?}", song_cpy.filename); + + let path = match song_cpy.song_path() { + Ok(s_path) => s_path, + Err(err) => { + assert!(false, "Error: {:?}", err); + String::new() + } + }; + + match File::create(path) { + Ok(mut file_cpy) => { + let _ = file_cpy.write_all(&buffer); + } + Err(err) => { + assert!(false, "Error: {:?}", err); + } + }; + } + Err(err) => { + assert!(false, "Error: {:?}", err); + } + }, + Err(err) => { + assert!(false, "Error extracting song data: {:?}", err); + } + } +} diff --git a/tests/track01.flac b/tests/track01.flac new file mode 100644 index 0000000000000000000000000000000000000000..b018649c66699a09eb7e75037f1757e0ce559b8a GIT binary patch literal 13795 zcmeI2X;4=88O2{klbX2iC{1Wwh*)I_dMsE z{}*GzqsBTMj@LRnI(z=p(c$Rw@=33yj_xzBjypLZ_K@54Jol|LL%ow81+;Rs=+xHp zXTqbBVuAw)4I32bbiUx>uAYC~OXkK!yQ62%S?&stn-@FRH!?o1gJ&KcmFRW_IfI4< zIEMrT1z97{ABhv7`zxn<9Bja8FDL|^j*KRoAl+T^A*lV-$kxYwQ?Nnaa%Hq~V$~~PHzmTJxxya%d3zUDH zX7Nwzm76}cxJ{$-r3i~(I;uRai^VV3DG&6sxNU{Nd zyeAfSe4?D2VsWSMlirt&wT7WX!k3zIDNxuQI#+2Wsmp&ax_i(k2>ysyCG zSO2X1WvRu!bCl2Fc|UV2AHn-xTcqrV^YmG$JPGIRyGl6|&+E5b`A593|5D|JIFH|l z$~|%3*JmhCgPsH4QyvJt{U<3mVIKqERlbCM{rpYkuFx}JjPg9_J!qWr6YOJfgmNnO z<+T3x5PtFSQ(!mc7Vuk;k8&>jIHb4oUHJ7E?UhHuPea=%Pk`To6&=^$$6+t(pc;M+ z@mKx^dHQ95av}0IysvUQB9+fV?{O=YQ*fT~ z$;#j2yuVIRj=}f5ov7Rm-y0sKd=Yv~h*3TRy(Y#f`$Nx&`O4FwcjQpz{qW;&f|Rer zukXB}91cIfJ3@IB{61-b^4G}2$MPA;2Rk;Xxnr;2PHT)hRZ@(>9ZpQPX_9|!KeRHan zy>Xto2b34!ywRtW>+n2xlk!=-FXn{uWSnPSt#W^ycm59L80Z;WtlSNHFW9D>f_*H^ zRsI(HT9m5n4?P#JQ=SgJmt-qn#6IFSD4)T;mR?p4ho6@HNqH3f7Jox|Km3?*Q~5gl zns`Ck0Y824sd57Rmh^k&ui?iJ&noA^uOIzQ`7-jf{DE=>@|Ju{c?k0O@onYN$m@#7 z%0Z|@Jm!p@lWLL;T%h|FW z9dUFW)H=!baY{{UoMMynbsX$Y*%} z8i=})!XVe9u#Hqk{Q?@@NMjkyLS-9kSQmrQ>Bd?X%2SlKkeWUx@;aCsS-tQ;TQZblYMX(O&L zBb&ALJ?=Lnhe2+G0ynlW>d9z$V=K$xAu8P1#=6*!jyG~yC}AjZBaf96jFva@SxTj- zaif5>^*MUpC}faxaFH2BjQTCybVf1DAPHBQQNp@tjl0g+&O*6~%gorp%BjI^XY6Dt z4aaq6>|$+=$9-q)W{_veL-#Q1gXOh*SqAlTuu|5=1vz>d3#Fqxw49YQS6*AeQhF)} z+sE2Um!nrQ$e)PFRgC&^S;KyoK_6LEHR~c$R(XJhvQb1n$jbR%)^LcW6eo+SVQu-y zDr*_!hhnJj>mpgKeUyb#DyBQe%K2Pud7PybCdNI%+6oqHpJb4e zB!s6J_0|&8dX_Sij< zKM|^%X|(nYY|dOm^H*YX=2}K<8B{mZ8N!xO-CW0r6<~AbdWP^eHfL_2waef_b0f`v z6)rS4(b}PKvbmY&4}_D=3`Xo8Txe!8ge7pHnZ<~;hm*~0hHxdEZ04}~vY@)Th2{7I zR5!P>`sQPE<~EjNZ*0!YWd)yy>Si8G`mm^;&kF8~&6x!(>8aS9S;*?^0T-G@EXQcL z&@5*4J%*Fb5|(2coNR7q1$-zo#{)uw*GDfUG9$L;2-j>%^Fk;K(VEY)tmU8q;T02xkuA=z^Wexjj?J`+Z zHO+rjR(XICYcC=nWC&Nv8V)gH_heBu3}K0^vX<31UrcwH<=9(nd4$!MCC05|IsPEl zKFSL2E2cZflAbEIJkAO}FUCE=l0GcfKFR8PEFnC_a!iw$*0cJ0NRUsn9HS-b4Xofs TPY9EJ%*IYvS~&joyT0|G#2-_X literal 0 HcmV?d00001 diff --git a/tests/track02.flac b/tests/track02.flac new file mode 100644 index 0000000000000000000000000000000000000000..3dfdbdb171d81ae387d33754fc1e1eec2236f690 GIT binary patch literal 14322 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