feat: test GET login page handler
This commit is contained in:
parent
8d822e1b31
commit
702cdbdd99
|
@ -1,17 +1,17 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use actix_web::{get, http::header, post, web, HttpResponse};
|
||||
use actix_web::http::header::ContentType;
|
||||
use actix_web::{get, post, web, HttpResponse};
|
||||
use url::Url;
|
||||
|
||||
use crate::auth::adapter::input::web::routes::RoutesRepository;
|
||||
use crate::auth::adapter::out::forge::SupportedForges;
|
||||
use crate::auth::application::port::input::ui::{
|
||||
errors::*, login::RequestAuthorizationInterface,
|
||||
};
|
||||
use crate::auth::application::port::input::ui::{errors::*, login::RequestAuthorizationInterface};
|
||||
use crate::auth::application::port::out::db::save_oauth_state::SaveOAuthState;
|
||||
use crate::utils::random_string::GenerateRandomStringInterface;
|
||||
use crate::ForgeRepository;
|
||||
|
||||
use super::template::{LoginCtxFactory, LoginPageInterface};
|
||||
use crate::ForgeRepository;
|
||||
|
||||
#[get("/login")]
|
||||
#[tracing::instrument(name = "login page handler", skip(forges, routes, template))]
|
||||
|
@ -23,16 +23,16 @@ async fn login_page(
|
|||
let template_ctx = LoginCtxFactory::get_ctx(forges.get_supported_forges(), &routes);
|
||||
let page = template.get_login_page(template_ctx).unwrap();
|
||||
Ok(HttpResponse::Ok()
|
||||
.append_header((header::CONTENT_TYPE, "text/html; charset=UTF-8"))
|
||||
.insert_header(ContentType::html())
|
||||
.body(page))
|
||||
}
|
||||
|
||||
#[post("/oauth/forgejo/login")]
|
||||
async fn request_oauth_authorization_forgejo(
|
||||
forge_name: web::Path<String>,
|
||||
forges: web::Data<Arc<ForgeRepository>>,
|
||||
save_oauth_state_adapter: web::Data<Arc<dyn SaveOAuthState>>,
|
||||
routes: web::Data<Arc<RoutesRepository>>,
|
||||
generate_random_string: web::Data<Arc<dyn GenerateRandomStringInterface>>,
|
||||
settings: web::Data<crate::settings::Settings>,
|
||||
) -> InUIResult<HttpResponse> {
|
||||
let oauth_auth_req_uri_adapter = &forges
|
||||
|
@ -51,11 +51,12 @@ async fn request_oauth_authorization_forgejo(
|
|||
let web_adapter = super::adapter::RequestAuthorizationHandler::new(
|
||||
save_oauth_state_adapter.as_ref().to_owned(),
|
||||
oauth_auth_req_uri_adapter.clone(),
|
||||
generate_random_string.as_ref().clone(),
|
||||
process_authorization_response_redirect_uri,
|
||||
);
|
||||
|
||||
web_adapter
|
||||
.request_oauth_authorization(forge_name.into_inner())
|
||||
.request_oauth_authorization(SupportedForges::Forgejo.to_string())
|
||||
.await
|
||||
}
|
||||
|
||||
|
@ -63,3 +64,42 @@ pub fn services(cfg: &mut web::ServiceConfig) {
|
|||
cfg.service(login_page);
|
||||
cfg.service(request_oauth_authorization_forgejo);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use actix_web::{http::header::ContentType, test, App};
|
||||
|
||||
use crate::auth::adapter::input::web::login::template::load_templates;
|
||||
use crate::auth::adapter::out::forge::forgejo::Forgejo;
|
||||
|
||||
#[actix_web::test]
|
||||
async fn test_get_login_page() {
|
||||
let settings = crate::settings::Settings::new().unwrap();
|
||||
|
||||
let forgejo = Forgejo::new(
|
||||
settings.forges.forgejo.url.clone(),
|
||||
settings.forges.forgejo.client_id.clone(),
|
||||
settings.forges.forgejo.client_secret.clone(),
|
||||
);
|
||||
let forges = ForgeRepository::new(forgejo);
|
||||
let routes = RoutesRepository::default();
|
||||
|
||||
let app = test::init_service(
|
||||
App::new()
|
||||
.app_data(web::Data::new(Arc::new(forges.clone())))
|
||||
.app_data(web::Data::new(Arc::new(routes.clone())))
|
||||
.configure(load_templates)
|
||||
.service(login_page),
|
||||
)
|
||||
.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());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue