ForgeFlux/src/auth/adapter/input/web/login/handlers/login_page.rs

67 lines
2.2 KiB
Rust

use actix_web::http::header::ContentType;
use actix_web::{get, web, HttpResponse};
use crate::auth::application::port::input::ui::errors::*;
use super::template::LoginCtxFactory;
use super::types;
#[get("/login")]
#[tracing::instrument(name = "login page handler", skip(forges, routes, template))]
async fn handler(
forges: types::WebForgeRepositoryInterface,
routes: types::WebRouteRepository,
template: super::WebLoginPageInterface,
) -> InUIResult<HttpResponse> {
let template_ctx = LoginCtxFactory::get_ctx(forges.get_supported_forges(), &routes);
let page = template.get_login_page(template_ctx).unwrap();
Ok(HttpResponse::Ok()
.insert_header(ContentType::html())
.body(page))
}
pub fn services(cfg: &mut web::ServiceConfig) {
cfg.service(handler);
}
#[cfg(test)]
mod tests {
use super::*;
use actix_web::{http::header::ContentType, test, App};
use std::sync::Arc;
use crate::auth::adapter::input::web::login::template::load_templates;
use crate::auth::adapter::input::web::routes::RoutesRepository;
use crate::auth::adapter::out::forge::forge_repository::MockForgeRepositoryInterface;
use crate::auth::adapter::out::forge::SupportedForges;
#[actix_web::test]
async fn test_login_page_handler() {
let mut mock_forges = MockForgeRepositoryInterface::default();
mock_forges
.expect_get_supported_forges()
.return_const(vec![SupportedForges::Forgejo])
.times(1);
let mock_forges = types::WebForgeRepositoryInterface::new(Arc::new(mock_forges));
let routes = types::WebRouteRepository::new(Arc::new(RoutesRepository::default()));
let app = test::init_service(
App::new()
.app_data(mock_forges)
.app_data(routes)
.configure(load_templates)
.service(handler),
)
.await;
let req = test::TestRequest::get()
.uri("/login")
.insert_header(ContentType::html())
.to_request();
let resp = test::call_service(&app, req).await;
println!("{}", resp.status());
assert!(resp.status().is_success());
}
}