Adds genre endpoint tests

This commit is contained in:
Antoine Gersant 2024-09-30 18:59:09 -07:00
parent 7f3e091e32
commit 071aced10a
2 changed files with 170 additions and 0 deletions

View file

@ -133,3 +133,124 @@ async fn recent_golden_path_api_v7() {
assert_eq!(entries.len(), 3);
assert!(entries[0].path.starts_with("collection/"));
}
#[tokio::test]
async fn genres_requires_auth() {
let mut service = ServiceType::new(&test_name!()).await;
let request = protocol::genres::<V8>();
let response = service.fetch(&request).await;
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn genres_golden_path() {
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::genres::<V8>();
let response = service
.fetch_json::<_, Vec<dto::GenreHeader>>(&request)
.await;
assert_eq!(response.status(), StatusCode::OK);
let entries = response.body();
assert_eq!(entries.len(), 4);
}
#[tokio::test]
async fn genre_requires_auth() {
let mut service = ServiceType::new(&test_name!()).await;
let request = protocol::genre::<V8>("Metal");
let response = service.fetch(&request).await;
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn genre_golden_path() {
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::genre::<V8>("Metal");
let response = service.fetch_json::<_, dto::Genre>(&request).await;
assert_eq!(response.status(), StatusCode::OK);
let genre = response.body();
assert_eq!(genre.header.name, "Metal");
}
#[tokio::test]
async fn genre_albums_requires_auth() {
let mut service = ServiceType::new(&test_name!()).await;
let request = protocol::genre_albums::<V8>("Metal");
let response = service.fetch(&request).await;
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn genre_albums_golden_path() {
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::genre_albums::<V8>("Metal");
let response = service
.fetch_json::<_, Vec<dto::AlbumHeader>>(&request)
.await;
assert_eq!(response.status(), StatusCode::OK);
let entries = response.body();
assert_eq!(entries.len(), 1);
}
#[tokio::test]
async fn genre_artists_requires_auth() {
let mut service = ServiceType::new(&test_name!()).await;
let request = protocol::genre_artists::<V8>("Metal");
let response = service.fetch(&request).await;
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn genre_artists_golden_path() {
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::genre_artists::<V8>("Metal");
let response = service
.fetch_json::<_, Vec<dto::ArtistHeader>>(&request)
.await;
assert_eq!(response.status(), StatusCode::OK);
let entries = response.body();
assert_eq!(entries.len(), 1);
}
#[tokio::test]
async fn genre_songs_requires_auth() {
let mut service = ServiceType::new(&test_name!()).await;
let request = protocol::genre_songs::<V8>("Metal");
let response = service.fetch(&request).await;
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn genre_songs_golden_path() {
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::genre_songs::<V8>("Metal");
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(), 5);
}

View file

@ -186,6 +186,55 @@ pub fn flatten<VERSION: ProtocolVersion>(path: &Path) -> Request<()> {
.unwrap()
}
pub fn genres<VERSION: ProtocolVersion>() -> Request<()> {
Request::builder()
.header("Accept-Version", VERSION::header_value())
.method(Method::GET)
.uri("/api/genres")
.body(())
.unwrap()
}
pub fn genre<VERSION: ProtocolVersion>(genre: &str) -> Request<()> {
let endpoint = format!("/api/genres/{}", url_encode(genre));
Request::builder()
.header("Accept-Version", VERSION::header_value())
.method(Method::GET)
.uri(endpoint)
.body(())
.unwrap()
}
pub fn genre_albums<VERSION: ProtocolVersion>(genre: &str) -> Request<()> {
let endpoint = format!("/api/genres/{}/albums", url_encode(genre));
Request::builder()
.header("Accept-Version", VERSION::header_value())
.method(Method::GET)
.uri(endpoint)
.body(())
.unwrap()
}
pub fn genre_artists<VERSION: ProtocolVersion>(genre: &str) -> Request<()> {
let endpoint = format!("/api/genres/{}/artists", url_encode(genre));
Request::builder()
.header("Accept-Version", VERSION::header_value())
.method(Method::GET)
.uri(endpoint)
.body(())
.unwrap()
}
pub fn genre_songs<VERSION: ProtocolVersion>(genre: &str) -> Request<()> {
let endpoint = format!("/api/genres/{}/songs", url_encode(genre));
Request::builder()
.header("Accept-Version", VERSION::header_value())
.method(Method::GET)
.uri(endpoint)
.body(())
.unwrap()
}
pub fn random<VERSION: ProtocolVersion>() -> Request<()> {
Request::builder()
.header("Accept-Version", VERSION::header_value())