67 lines
2.2 KiB
Rust
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());
|
|
}
|
|
}
|