feat: test helpers for actix web harness

This commit is contained in:
Aravinth Manivannan 2025-01-10 15:49:05 +05:30
parent 17a7e58f44
commit a36684d9ae
Signed by: realaravinth
GPG key ID: F8F50389936984FF
2 changed files with 58 additions and 0 deletions

View file

@ -0,0 +1,57 @@
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
use std::sync::Arc;
use crate::db::{migrate::*, sqlx_postgres::*};
use crate::settings::Settings;
use actix_web::cookie::Key;
use actix_web::dev::Service;
pub async fn init_db() -> (Settings, Key, Postgres) {
let settings = crate::settings::tests::get_settings().await;
settings.create_db().await;
let secret_key = Key::from(settings.server.cookie_secret.as_bytes());
let db = crate::db::sqlx_postgres::Postgres::init(&settings.database.url).await;
db.migrate().await;
(settings, secret_key, db)
}
#[macro_export]
macro_rules! get_test_app {
($settings:ident, $secret_key:ident, $db:ident) => {
test::init_service(
actix_web::App::new()
.wrap(actix_identity::IdentityMiddleware::default())
.wrap(tracing_actix_web::TracingLogger::default())
.wrap(actix_web::middleware::Compress::default())
.app_data(actix_web::web::Data::new($settings.clone()))
.wrap(actix_session::SessionMiddleware::new(
actix_session::storage::CookieSessionStore::default(),
$secret_key.clone(),
))
.wrap(
actix_web::middleware::DefaultHeaders::new()
.add(("Permissions-Policy", "interest-cohort=()")),
)
.configure(crate::utils::load_adapters::load_adapters(
$db.pool.clone(),
$settings.clone(),
)),
)
.await
};
}
pub async fn page_test_runner(path: &str) {
use actix_web::http::StatusCode;
use actix_web::test;
let (settings, secret_key, db) = init_db().await;
let app = get_test_app!(settings, secret_key, db);
let req = test::TestRequest::get().uri(path).to_request();
let resp = test::call_service(&app, req).await;
let status = resp.status();
assert_eq!(status, StatusCode::OK);
}

View file

@ -2,4 +2,5 @@
//
// SPDX-License-Identifier: AGPL-3.0-or-later
pub mod actix_web_test_utils;
pub mod bdd;