Skip to content
This repository has been archived by the owner on Oct 3, 2024. It is now read-only.

Commit

Permalink
Fix Program tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rnijveld committed Aug 13, 2024
1 parent 3d27532 commit 9d4c792
Showing 1 changed file with 50 additions and 10 deletions.
60 changes: 50 additions & 10 deletions src/vtn/api/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,11 @@ impl QueryParams {

#[cfg(test)]
mod test {
use crate::{data_source::InMemoryStorage, jwt::JwtManager, state::AppState};
use crate::{
data_source::{AuthInfo, InMemoryStorage},
jwt::{AuthRole, JwtManager},
state::AppState,
};

use super::*;
use axum::{
Expand Down Expand Up @@ -234,10 +238,11 @@ mod test {
}
}

fn program_request(method: http::Method, program: Program) -> Request<Body> {
fn program_request(method: http::Method, program: Program, token: &str) -> Request<Body> {
Request::builder()
.method(method)
.uri(format!("/programs/{}", program.id))
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.header(http::header::CONTENT_TYPE, mime::APPLICATION_JSON.as_ref())
.body(Body::from(serde_json::to_vec(&program).unwrap()))
.unwrap()
Expand All @@ -254,22 +259,43 @@ mod test {
.insert(program.id.clone(), program);
}

store.auth.write().await.push(AuthInfo {
client_id: "admin".to_string(),
client_secret: "admin".to_string(),
role: AuthRole::BL,
ven: None,
});

AppState::new(store, JwtManager::from_base64_secret("test").unwrap())
}

fn get_admin_token_from_state(state: &AppState) -> String {
state
.jwt_manager
.create(
std::time::Duration::from_secs(3600),
"admin".to_string(),
AuthRole::BL,
None,
)
.unwrap()
}

#[tokio::test]
async fn get() {
let program = Program::new(default_content());
let program_id = program.id.clone();

let state = state_with_programs(vec![program.clone()]).await;
let token = get_admin_token_from_state(&state);
let app = crate::app_with_state(state);

let response = app
.oneshot(
Request::builder()
.method(http::Method::GET)
.uri(format!("/programs/{program_id}"))
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.body(Body::empty())
.unwrap(),
)
Expand Down Expand Up @@ -307,11 +333,13 @@ mod test {
let program_id = programs[1].id.clone();

let state = state_with_programs(programs).await;
let token = get_admin_token_from_state(&state);
let mut app = crate::app_with_state(state);

let request = Request::builder()
.method(http::Method::DELETE)
.uri(format!("/programs/{program_id}"))
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.body(Body::empty())
.unwrap();

Expand All @@ -329,7 +357,7 @@ mod test {

assert_eq!(program2, db_program.content);

let response = retrieve_all_with_filter_help(&mut app, "").await;
let response = retrieve_all_with_filter_help(&mut app, "", &token).await;
assert_eq!(response.status(), StatusCode::OK);

let body = response.into_body().collect().await.unwrap().to_bytes();
Expand All @@ -342,10 +370,11 @@ mod test {
let program = Program::new(default_content());

let state = state_with_programs(vec![program.clone()]).await;
let token = get_admin_token_from_state(&state);
let app = crate::app_with_state(state);

let response = app
.oneshot(program_request(http::Method::PUT, program.clone()))
.oneshot(program_request(http::Method::PUT, program.clone(), &token))
.await
.unwrap();

Expand All @@ -363,13 +392,14 @@ mod test {
let program = Program::new(default_content());

let state = state_with_programs(vec![program.clone()]).await;
let token = get_admin_token_from_state(&state);
let app = crate::app_with_state(state);

// different id, same (default) name
let program = Program::new(default_content());

let response = app
.oneshot(program_request(http::Method::PUT, program.clone()))
.oneshot(program_request(http::Method::PUT, program.clone(), &token))
.await
.unwrap();

Expand All @@ -379,6 +409,7 @@ mod test {
#[tokio::test]
async fn create_same_name() {
let state = state_with_programs(vec![]).await;
let token = get_admin_token_from_state(&state);
let mut app = crate::app_with_state(state);

let program = Program::new(default_content());
Expand All @@ -387,6 +418,7 @@ mod test {
let request = Request::builder()
.method(http::Method::POST)
.uri("/programs")
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.header(http::header::CONTENT_TYPE, mime::APPLICATION_JSON.as_ref())
.body(Body::from(serde_json::to_vec(&content).unwrap()))
.unwrap();
Expand All @@ -402,6 +434,7 @@ mod test {
let request = Request::builder()
.method(http::Method::POST)
.uri("/programs")
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.header(http::header::CONTENT_TYPE, mime::APPLICATION_JSON.as_ref())
.body(Body::from(serde_json::to_vec(&content).unwrap()))
.unwrap();
Expand All @@ -410,10 +443,15 @@ mod test {
assert_eq!(response.status(), StatusCode::CONFLICT);
}

async fn retrieve_all_with_filter_help(app: &mut Router, query_params: &str) -> Response<Body> {
async fn retrieve_all_with_filter_help(
app: &mut Router,
query_params: &str,
token: &str,
) -> Response<Body> {
let request = Request::builder()
.method(http::Method::GET)
.uri(format!("/programs?{query_params}"))
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
.header(http::header::CONTENT_TYPE, mime::APPLICATION_JSON.as_ref())
.body(Body::empty())
.unwrap();
Expand Down Expand Up @@ -448,39 +486,41 @@ mod test {
];

let state = state_with_programs(programs).await;
let token = get_admin_token_from_state(&state);
let mut app = crate::app_with_state(state);

// no query params
let response = retrieve_all_with_filter_help(&mut app, "").await;
let response = retrieve_all_with_filter_help(&mut app, "", &token).await;
assert_eq!(response.status(), StatusCode::OK);

let body = response.into_body().collect().await.unwrap().to_bytes();
let programs: Vec<Program> = serde_json::from_slice(&body).unwrap();
assert_eq!(programs.len(), 3);

// skip
let response = retrieve_all_with_filter_help(&mut app, "skip=1").await;
let response = retrieve_all_with_filter_help(&mut app, "skip=1", &token).await;
assert_eq!(response.status(), StatusCode::OK);

let body = response.into_body().collect().await.unwrap().to_bytes();
let programs: Vec<Program> = serde_json::from_slice(&body).unwrap();
assert_eq!(programs.len(), 2);

// limit
let response = retrieve_all_with_filter_help(&mut app, "limit=2").await;
let response = retrieve_all_with_filter_help(&mut app, "limit=2", &token).await;
assert_eq!(response.status(), StatusCode::OK);

let body = response.into_body().collect().await.unwrap().to_bytes();
let programs: Vec<Program> = serde_json::from_slice(&body).unwrap();
assert_eq!(programs.len(), 2);

// program name
let response = retrieve_all_with_filter_help(&mut app, "targetType=NONSENSE").await;
let response = retrieve_all_with_filter_help(&mut app, "targetType=NONSENSE", &token).await;
assert_eq!(response.status(), StatusCode::NOT_IMPLEMENTED);

let response = retrieve_all_with_filter_help(
&mut app,
"targetType=PROGRAM_NAME&targetValues=program1&targetValues=program2",
&token,
)
.await;
assert_eq!(response.status(), StatusCode::OK);
Expand Down

0 comments on commit 9d4c792

Please sign in to comment.