polaris-mirror/src/service/test/admin.rs
Antoine Gersant 847c26ddfe
Service unit tests improvements (#103)
- Simpler API for TestService
- More granular tests
- Tests for authentication requirements
- Better error handling (and HTTP response codes) for various bad inputs
2020-11-30 01:26:55 -08:00

81 lines
2.2 KiB
Rust

use http::StatusCode;
use crate::index;
use crate::service::dto;
use crate::service::test::{ServiceType, TestService};
use crate::unique_db_name;
#[test]
fn test_returns_api_version() {
let mut service = ServiceType::new(&unique_db_name!());
let request = service.request_builder().version();
let response = service.fetch_json::<_, dto::Version>(&request);
assert_eq!(response.status(), StatusCode::OK);
}
#[test]
fn test_initial_setup_golden_path() {
let mut service = ServiceType::new(&unique_db_name!());
let request = service.request_builder().initial_setup();
{
let response = service.fetch_json::<_, dto::InitialSetup>(&request);
assert_eq!(response.status(), StatusCode::OK);
let initial_setup = response.body();
assert_eq!(
initial_setup,
&dto::InitialSetup {
has_any_users: false
}
);
}
service.complete_initial_setup();
{
let response = service.fetch_json::<_, dto::InitialSetup>(&request);
assert_eq!(response.status(), StatusCode::OK);
let initial_setup = response.body();
assert_eq!(
initial_setup,
&dto::InitialSetup {
has_any_users: true
}
);
}
}
#[test]
fn test_trigger_index_golden_path() {
let mut service = ServiceType::new(&unique_db_name!());
service.complete_initial_setup();
service.login_admin();
let request = service.request_builder().random();
let response = service.fetch_json::<_, Vec<index::Directory>>(&request);
let entries = response.body();
assert_eq!(entries.len(), 0);
service.index();
let response = service.fetch_json::<_, Vec<index::Directory>>(&request);
let entries = response.body();
assert_eq!(entries.len(), 3);
}
#[test]
fn test_trigger_index_requires_auth() {
let mut service = ServiceType::new(&unique_db_name!());
service.complete_initial_setup();
let request = service.request_builder().trigger_index();
let response = service.fetch(&request);
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
#[test]
fn test_trigger_index_requires_admin() {
let mut service = ServiceType::new(&unique_db_name!());
service.complete_initial_setup();
service.login();
let request = service.request_builder().trigger_index();
let response = service.fetch(&request);
assert_eq!(response.status(), StatusCode::FORBIDDEN);
}