More granular test splitting
This commit is contained in:
parent
232eb7ac12
commit
7f3e091e32
4 changed files with 245 additions and 215 deletions
|
@ -12,11 +12,13 @@ pub mod protocol;
|
||||||
|
|
||||||
mod admin;
|
mod admin;
|
||||||
mod auth;
|
mod auth;
|
||||||
|
mod browser;
|
||||||
mod collection;
|
mod collection;
|
||||||
mod ddns;
|
mod ddns;
|
||||||
mod lastfm;
|
mod lastfm;
|
||||||
mod media;
|
mod media;
|
||||||
mod playlist;
|
mod playlist;
|
||||||
|
mod search;
|
||||||
mod settings;
|
mod settings;
|
||||||
mod swagger;
|
mod swagger;
|
||||||
mod user;
|
mod user;
|
||||||
|
|
154
src/server/test/browser.rs
Normal file
154
src/server/test/browser.rs
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
use http::StatusCode;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
|
use crate::server::dto;
|
||||||
|
use crate::server::test::protocol::{V7, V8};
|
||||||
|
use crate::server::test::{constants::*, protocol, ServiceType, TestService};
|
||||||
|
use crate::test_name;
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn browse_requires_auth() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
let request = protocol::browse::<V8>(&PathBuf::new());
|
||||||
|
let response = service.fetch(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn browse_root() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let request = protocol::browse::<V8>(&PathBuf::new());
|
||||||
|
let response = service
|
||||||
|
.fetch_json::<_, Vec<dto::BrowserEntry>>(&request)
|
||||||
|
.await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let entries = response.body();
|
||||||
|
assert!(entries.len() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn browse_directory() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
||||||
|
let request = protocol::browse::<V8>(&path);
|
||||||
|
let response = service
|
||||||
|
.fetch_json::<_, Vec<dto::BrowserEntry>>(&request)
|
||||||
|
.await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let entries = response.body();
|
||||||
|
assert_eq!(entries.len(), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn browse_missing_directory() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let path: PathBuf = ["not_my_collection"].iter().collect();
|
||||||
|
let request = protocol::browse::<V8>(&path);
|
||||||
|
let response = service.fetch(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn browse_directory_api_v7() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
||||||
|
let request = protocol::browse::<V7>(&path);
|
||||||
|
let response = service
|
||||||
|
.fetch_json::<_, Vec<dto::v7::CollectionFile>>(&request)
|
||||||
|
.await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let entries = response.body();
|
||||||
|
assert_eq!(entries.len(), 5);
|
||||||
|
match &entries[0] {
|
||||||
|
dto::v7::CollectionFile::Song(s) => {
|
||||||
|
assert_eq!(s.path, path.join("01 - Above The Water.mp3"))
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn flatten_requires_auth() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
let request = protocol::flatten::<V8>(&PathBuf::new());
|
||||||
|
let response = service.fetch(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn flatten_root() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let request = protocol::flatten::<V8>(&PathBuf::new());
|
||||||
|
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let song_list = response.body();
|
||||||
|
assert_eq!(song_list.paths.len(), 13);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn flatten_directory() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let request = protocol::flatten::<V8>(Path::new(TEST_MOUNT_NAME));
|
||||||
|
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let song_list = response.body();
|
||||||
|
assert_eq!(song_list.paths.len(), 13);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn flatten_missing_directory() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let path: PathBuf = ["not_my_collection"].iter().collect();
|
||||||
|
let request = protocol::flatten::<V8>(&path);
|
||||||
|
let response = service.fetch(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn flatten_directory_api_v7() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
||||||
|
let request = protocol::flatten::<V7>(&path);
|
||||||
|
let response = service.fetch_json::<_, Vec<dto::v7::Song>>(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
let entries = response.body();
|
||||||
|
assert_eq!(entries.len(), 5);
|
||||||
|
|
||||||
|
assert_eq!(entries[0].path, path.join("01 - Above The Water.mp3"));
|
||||||
|
}
|
|
@ -1,157 +1,16 @@
|
||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
use std::path::{Path, PathBuf};
|
|
||||||
|
|
||||||
use crate::server::dto;
|
use crate::{
|
||||||
use crate::server::test::protocol::{V7, V8};
|
server::{
|
||||||
use crate::server::test::{add_trailing_slash, constants::*, protocol, ServiceType, TestService};
|
dto,
|
||||||
use crate::test_name;
|
test::{
|
||||||
|
add_trailing_slash,
|
||||||
#[tokio::test]
|
protocol::{self, V7, V8},
|
||||||
async fn browse_requires_auth() {
|
ServiceType, TestService,
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
},
|
||||||
let request = protocol::browse::<V8>(&PathBuf::new());
|
},
|
||||||
let response = service.fetch(&request).await;
|
test_name,
|
||||||
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
};
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn browse_root() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let request = protocol::browse::<V8>(&PathBuf::new());
|
|
||||||
let response = service
|
|
||||||
.fetch_json::<_, Vec<dto::BrowserEntry>>(&request)
|
|
||||||
.await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let entries = response.body();
|
|
||||||
assert!(entries.len() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn browse_directory() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
|
||||||
let request = protocol::browse::<V8>(&path);
|
|
||||||
let response = service
|
|
||||||
.fetch_json::<_, Vec<dto::BrowserEntry>>(&request)
|
|
||||||
.await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let entries = response.body();
|
|
||||||
assert_eq!(entries.len(), 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn browse_missing_directory() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let path: PathBuf = ["not_my_collection"].iter().collect();
|
|
||||||
let request = protocol::browse::<V8>(&path);
|
|
||||||
let response = service.fetch(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::NOT_FOUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn browse_directory_api_v7() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
|
||||||
let request = protocol::browse::<V7>(&path);
|
|
||||||
let response = service
|
|
||||||
.fetch_json::<_, Vec<dto::v7::CollectionFile>>(&request)
|
|
||||||
.await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let entries = response.body();
|
|
||||||
assert_eq!(entries.len(), 5);
|
|
||||||
match &entries[0] {
|
|
||||||
dto::v7::CollectionFile::Song(s) => {
|
|
||||||
assert_eq!(s.path, path.join("01 - Above The Water.mp3"))
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn flatten_requires_auth() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
let request = protocol::flatten::<V8>(&PathBuf::new());
|
|
||||||
let response = service.fetch(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn flatten_root() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let request = protocol::flatten::<V8>(&PathBuf::new());
|
|
||||||
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let song_list = response.body();
|
|
||||||
assert_eq!(song_list.paths.len(), 13);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn flatten_directory() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let request = protocol::flatten::<V8>(Path::new(TEST_MOUNT_NAME));
|
|
||||||
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let song_list = response.body();
|
|
||||||
assert_eq!(song_list.paths.len(), 13);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn flatten_missing_directory() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let path: PathBuf = ["not_my_collection"].iter().collect();
|
|
||||||
let request = protocol::flatten::<V8>(&path);
|
|
||||||
let response = service.fetch(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::NOT_FOUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn flatten_directory_api_v7() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let path: PathBuf = [TEST_MOUNT_NAME, "Khemmis", "Hunted"].iter().collect();
|
|
||||||
let request = protocol::flatten::<V7>(&path);
|
|
||||||
let response = service.fetch_json::<_, Vec<dto::v7::Song>>(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
|
||||||
let entries = response.body();
|
|
||||||
assert_eq!(entries.len(), 5);
|
|
||||||
|
|
||||||
assert_eq!(entries[0].path, path.join("01 - Above The Water.mp3"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn random_requires_auth() {
|
async fn random_requires_auth() {
|
||||||
|
@ -274,66 +133,3 @@ async fn recent_golden_path_api_v7() {
|
||||||
assert_eq!(entries.len(), 3);
|
assert_eq!(entries.len(), 3);
|
||||||
assert!(entries[0].path.starts_with("collection/"));
|
assert!(entries[0].path.starts_with("collection/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn search_requires_auth() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
let request = protocol::search::<V8>("rhapsody");
|
|
||||||
let response = service.fetch(&request).await;
|
|
||||||
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn search_with_query() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let request = protocol::search::<V8>("door");
|
|
||||||
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
|
||||||
let songs = response.body();
|
|
||||||
|
|
||||||
let path: PathBuf = [
|
|
||||||
TEST_MOUNT_NAME,
|
|
||||||
"Khemmis",
|
|
||||||
"Hunted",
|
|
||||||
"04 - Beyond The Door.mp3",
|
|
||||||
]
|
|
||||||
.iter()
|
|
||||||
.collect();
|
|
||||||
assert_eq!(songs.paths, vec![path]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn search_with_query_v7() {
|
|
||||||
let mut service = ServiceType::new(&test_name!()).await;
|
|
||||||
service.complete_initial_setup().await;
|
|
||||||
service.login_admin().await;
|
|
||||||
service.index().await;
|
|
||||||
service.login().await;
|
|
||||||
|
|
||||||
let request = protocol::search::<V7>("door");
|
|
||||||
let response = service
|
|
||||||
.fetch_json::<_, Vec<dto::v7::CollectionFile>>(&request)
|
|
||||||
.await;
|
|
||||||
let songs = response.body();
|
|
||||||
|
|
||||||
let path: PathBuf = [
|
|
||||||
TEST_MOUNT_NAME,
|
|
||||||
"Khemmis",
|
|
||||||
"Hunted",
|
|
||||||
"04 - Beyond The Door.mp3",
|
|
||||||
]
|
|
||||||
.iter()
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
*songs,
|
|
||||||
vec![dto::v7::CollectionFile::Song(dto::v7::Song {
|
|
||||||
path,
|
|
||||||
..Default::default()
|
|
||||||
})]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
78
src/server/test/search.rs
Normal file
78
src/server/test/search.rs
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use http::StatusCode;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
server::{
|
||||||
|
dto,
|
||||||
|
test::{
|
||||||
|
constants::*,
|
||||||
|
protocol::{self, V7, V8},
|
||||||
|
ServiceType, TestService,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
test_name,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn search_requires_auth() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
let request = protocol::search::<V8>("rhapsody");
|
||||||
|
let response = service.fetch(&request).await;
|
||||||
|
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn search_with_query() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let request = protocol::search::<V8>("door");
|
||||||
|
let response = service.fetch_json::<_, dto::SongList>(&request).await;
|
||||||
|
let songs = response.body();
|
||||||
|
|
||||||
|
let path: PathBuf = [
|
||||||
|
TEST_MOUNT_NAME,
|
||||||
|
"Khemmis",
|
||||||
|
"Hunted",
|
||||||
|
"04 - Beyond The Door.mp3",
|
||||||
|
]
|
||||||
|
.iter()
|
||||||
|
.collect();
|
||||||
|
assert_eq!(songs.paths, vec![path]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn search_with_query_v7() {
|
||||||
|
let mut service = ServiceType::new(&test_name!()).await;
|
||||||
|
service.complete_initial_setup().await;
|
||||||
|
service.login_admin().await;
|
||||||
|
service.index().await;
|
||||||
|
service.login().await;
|
||||||
|
|
||||||
|
let request = protocol::search::<V7>("door");
|
||||||
|
let response = service
|
||||||
|
.fetch_json::<_, Vec<dto::v7::CollectionFile>>(&request)
|
||||||
|
.await;
|
||||||
|
let songs = response.body();
|
||||||
|
|
||||||
|
let path: PathBuf = [
|
||||||
|
TEST_MOUNT_NAME,
|
||||||
|
"Khemmis",
|
||||||
|
"Hunted",
|
||||||
|
"04 - Beyond The Door.mp3",
|
||||||
|
]
|
||||||
|
.iter()
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
*songs,
|
||||||
|
vec![dto::v7::CollectionFile::Song(dto::v7::Song {
|
||||||
|
path,
|
||||||
|
..Default::default()
|
||||||
|
})]
|
||||||
|
);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue