Fixed integration tests
This commit is contained in:
parent
cd45836924
commit
845105cf38
3 changed files with 22 additions and 30 deletions
|
@ -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(),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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]
|
||||||
|
|
Loading…
Add table
Reference in a new issue