Fixed integration tests

This commit is contained in:
Antoine Gersant 2024-08-01 02:08:35 -07:00
parent cd45836924
commit 845105cf38
3 changed files with 22 additions and 30 deletions

View file

@ -9,7 +9,7 @@ use trie_rs::{Trie, TrieBuilder};
use crate::app::{scanner, Error}; use crate::app::{scanner, Error};
#[derive(Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum File { pub enum File {
Directory(PathBuf), Directory(PathBuf),
Song(PathBuf), Song(PathBuf),
@ -17,7 +17,7 @@ pub enum File {
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct Browser { pub struct Browser {
directories: HashMap<PathBuf, HashSet<File>>, directories: HashMap<PathBuf, Vec<File>>,
flattened: Trie<String>, flattened: Trie<String>,
} }
@ -33,7 +33,7 @@ impl Browser {
let Some(files) = self.directories.get(virtual_path.as_ref()) else { let Some(files) = self.directories.get(virtual_path.as_ref()) else {
return Err(Error::DirectoryNotFound(virtual_path.as_ref().to_owned())); return Err(Error::DirectoryNotFound(virtual_path.as_ref().to_owned()));
}; };
Ok(files.iter().cloned().collect()) Ok(files.clone())
} }
pub fn flatten<P: AsRef<Path>>(&self, virtual_path: P) -> Result<Vec<PathBuf>, Error> { pub fn flatten<P: AsRef<Path>>(&self, virtual_path: P) -> Result<Vec<PathBuf>, Error> {
@ -56,7 +56,7 @@ impl Browser {
} }
pub struct Builder { pub struct Builder {
directories: HashMap<PathBuf, HashSet<File>>, directories: HashMap<PathBuf, Vec<File>>,
flattened: TrieBuilder<String>, flattened: TrieBuilder<String>,
} }
@ -79,7 +79,7 @@ impl Builder {
self.directories self.directories
.entry(parent.clone()) .entry(parent.clone())
.or_default() .or_default()
.insert(File::Directory(directory.virtual_path)); .push(File::Directory(directory.virtual_path));
} }
} }
@ -87,7 +87,7 @@ impl Builder {
self.directories self.directories
.entry(song.virtual_parent.clone()) .entry(song.virtual_parent.clone())
.or_default() .or_default()
.insert(File::Song(song.virtual_path.clone())); .push(File::Song(song.virtual_path.clone()));
self.flattened.push( self.flattened.push(
song.virtual_path song.virtual_path
@ -97,7 +97,10 @@ impl Builder {
); );
} }
pub fn build(self) -> Browser { pub fn build(mut self) -> Browser {
for directory in self.directories.values_mut() {
directory.sort();
}
Browser { Browser {
directories: self.directories, directories: self.directories,
flattened: self.flattened.build(), flattened: self.flattened.build(),

View file

@ -116,23 +116,10 @@ pub trait TestService {
let response = self.fetch(&request).await; let response = self.fetch(&request).await;
assert_eq!(response.status(), StatusCode::OK); assert_eq!(response.status(), StatusCode::OK);
loop {
let browse_request = protocol::browse::<V8>(Path::new(""));
let response = self
.fetch_json::<(), Vec<dto::BrowserEntry>>(&browse_request)
.await;
let entries = response.body();
if !entries.is_empty() {
break;
}
tokio::time::sleep(Duration::from_millis(100)).await;
}
loop { loop {
let flatten_request = protocol::flatten::<V8>(Path::new("")); let flatten_request = protocol::flatten::<V8>(Path::new(""));
let response = self.fetch_json::<_, Vec<dto::Song>>(&flatten_request).await; let response = self.fetch(&flatten_request).await;
let entries = response.body(); if response.status() == StatusCode::OK {
if !entries.is_empty() {
break; break;
} }
tokio::time::sleep(Duration::from_millis(100)).await; tokio::time::sleep(Duration::from_millis(100)).await;

View file

@ -78,7 +78,9 @@ async fn browse_directory_api_v7() {
let entries = response.body(); let entries = response.body();
assert_eq!(entries.len(), 5); assert_eq!(entries.len(), 5);
match &entries[0] { match &entries[0] {
dto::v7::CollectionFile::Song(s) => assert_eq!(s.artist.as_deref(), Some("Khemmis")), dto::v7::CollectionFile::Song(s) => {
assert_eq!(s.path, path.join("01 - Above The Water.mp3"))
}
_ => (), _ => (),
} }
} }
@ -100,10 +102,10 @@ async fn flatten_root() {
service.login().await; service.login().await;
let request = protocol::flatten::<V8>(&PathBuf::new()); let request = protocol::flatten::<V8>(&PathBuf::new());
let response = service.fetch_json::<_, Vec<dto::Song>>(&request).await; let response = service.fetch_json::<_, dto::SongList>(&request).await;
assert_eq!(response.status(), StatusCode::OK); assert_eq!(response.status(), StatusCode::OK);
let entries = response.body(); let song_list = response.body();
assert_eq!(entries.len(), 13); assert_eq!(song_list.paths.len(), 13);
} }
#[tokio::test] #[tokio::test]
@ -115,10 +117,10 @@ async fn flatten_directory() {
service.login().await; service.login().await;
let request = protocol::flatten::<V8>(Path::new(TEST_MOUNT_NAME)); let request = protocol::flatten::<V8>(Path::new(TEST_MOUNT_NAME));
let response = service.fetch_json::<_, Vec<dto::Song>>(&request).await; let response = service.fetch_json::<_, dto::SongList>(&request).await;
assert_eq!(response.status(), StatusCode::OK); assert_eq!(response.status(), StatusCode::OK);
let entries = response.body(); let song_list = response.body();
assert_eq!(entries.len(), 13); assert_eq!(song_list.paths.len(), 13);
} }
#[tokio::test] #[tokio::test]
@ -148,7 +150,7 @@ async fn flatten_directory_api_v7() {
let entries = response.body(); let entries = response.body();
assert_eq!(entries.len(), 5); assert_eq!(entries.len(), 5);
assert_eq!(entries[0].artist.as_deref(), Some("Khemmis")); assert_eq!(entries[0].path, path.join("01 - Above The Water.mp3"));
} }
#[tokio::test] #[tokio::test]