Restructure for testability and implement first tests
This commit is contained in:
18
tests/health_check.rs
Normal file
18
tests/health_check.rs
Normal file
@ -0,0 +1,18 @@
|
||||
mod util;
|
||||
|
||||
use actix_web::client;
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn health_check_works() {
|
||||
let test_app = util::spawn_app().await;
|
||||
|
||||
let client = client::Client::default();
|
||||
|
||||
let response = client
|
||||
.get(&format!("{}/health_check", test_app.address))
|
||||
.send()
|
||||
.await
|
||||
.expect("Failed to execute request");
|
||||
|
||||
assert!(response.status().is_success());
|
||||
}
|
18
tests/index.rs
Normal file
18
tests/index.rs
Normal file
@ -0,0 +1,18 @@
|
||||
mod util;
|
||||
|
||||
use actix_web::client;
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn index_returns_success() {
|
||||
let test_app = util::spawn_app().await;
|
||||
|
||||
let client = client::Client::default();
|
||||
|
||||
let response = client
|
||||
.get(&format!("{}/", test_app.address))
|
||||
.send()
|
||||
.await
|
||||
.expect("Failed to execute request");
|
||||
|
||||
assert!(response.status().is_success());
|
||||
}
|
18
tests/json.rs
Normal file
18
tests/json.rs
Normal file
@ -0,0 +1,18 @@
|
||||
mod util;
|
||||
|
||||
use actix_web::client;
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn json_returns_success() {
|
||||
let test_app = util::spawn_app().await;
|
||||
|
||||
let client = client::Client::default();
|
||||
|
||||
let response = client
|
||||
.get(&format!("{}/github/vbrandl/hoc/json", test_app.address))
|
||||
.send()
|
||||
.await
|
||||
.expect("Failed to execute request");
|
||||
|
||||
assert!(response.status().is_success());
|
||||
}
|
50
tests/util/mod.rs
Normal file
50
tests/util/mod.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use hoc::{config::Settings, telemetry};
|
||||
|
||||
use std::net::TcpListener;
|
||||
|
||||
use tempfile::{tempdir, TempDir};
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
static ref TRACING: () = {
|
||||
let filter = if std::env::var("TEST_LOG").is_ok() { "debug" } else { "" };
|
||||
let subscriber = telemetry::get_subscriber("test", filter);
|
||||
telemetry::init_subscriber(subscriber);
|
||||
};
|
||||
}
|
||||
|
||||
pub struct TestApp {
|
||||
pub address: String,
|
||||
repo_dir: TempDir,
|
||||
cache_dir: TempDir,
|
||||
}
|
||||
|
||||
pub async fn spawn_app() -> TestApp {
|
||||
lazy_static::initialize(&TRACING);
|
||||
|
||||
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind random port");
|
||||
|
||||
let port = listener.local_addr().unwrap().port();
|
||||
let address = format!("http://127.0.0.1:{}", port);
|
||||
|
||||
let repo_dir = tempdir().expect("Cannot create repo_dir");
|
||||
let cache_dir = tempdir().expect("Cannot create cache_dir");
|
||||
|
||||
let mut settings = Settings::load().expect("Failed to read configuration.");
|
||||
settings.repodir = repo_dir.path().to_path_buf();
|
||||
settings.cachedir = cache_dir.path().to_path_buf();
|
||||
// configuration.database.database_name = Uuid::new_v4().to_string();
|
||||
|
||||
// let connection_pool = configure_database(&configuration.database).await;
|
||||
|
||||
let server = hoc::run(listener, settings)
|
||||
.await
|
||||
.expect("Failed to bind address");
|
||||
|
||||
let _ = tokio::spawn(server);
|
||||
|
||||
TestApp {
|
||||
address,
|
||||
repo_dir,
|
||||
cache_dir,
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user