More granular test splitting

This commit is contained in:
Antoine Gersant 2024-09-30 18:51:22 -07:00
parent 232eb7ac12
commit 7f3e091e32
4 changed files with 245 additions and 215 deletions

View file

@ -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
View 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"));
}

View file

@ -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
View 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()
})]
);
}