More granular test splitting
This commit is contained in:
parent
232eb7ac12
commit
7f3e091e32
4 changed files with 245 additions and 215 deletions
src/server
|
@ -12,11 +12,13 @@ pub mod protocol;
|
|||
|
||||
mod admin;
|
||||
mod auth;
|
||||
mod browser;
|
||||
mod collection;
|
||||
mod ddns;
|
||||
mod lastfm;
|
||||
mod media;
|
||||
mod playlist;
|
||||
mod search;
|
||||
mod settings;
|
||||
mod swagger;
|
||||
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 std::path::{Path, PathBuf};
|
||||
|
||||
use crate::server::dto;
|
||||
use crate::server::test::protocol::{V7, V8};
|
||||
use crate::server::test::{add_trailing_slash, 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"));
|
||||
}
|
||||
use crate::{
|
||||
server::{
|
||||
dto,
|
||||
test::{
|
||||
add_trailing_slash,
|
||||
protocol::{self, V7, V8},
|
||||
ServiceType, TestService,
|
||||
},
|
||||
},
|
||||
test_name,
|
||||
};
|
||||
|
||||
#[tokio::test]
|
||||
async fn random_requires_auth() {
|
||||
|
@ -274,66 +133,3 @@ async fn recent_golden_path_api_v7() {
|
|||
assert_eq!(entries.len(), 3);
|
||||
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