diff --git a/src/tests/actix_web_test_utils.rs b/src/tests/actix_web_test_utils.rs new file mode 100644 index 0000000..5ac7bd9 --- /dev/null +++ b/src/tests/actix_web_test_utils.rs @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2024 Aravinth Manivannan +// +// 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); +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs index e799cc5..7f68e0c 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -2,4 +2,5 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later +pub mod actix_web_test_utils; pub mod bdd;