feat: add mock implementations for configuration settings and update AppState to include config
This commit is contained in:
@@ -48,4 +48,13 @@ impl FromConfig for AuthSettings {
|
||||
fn validate(&self) -> Result<(), String> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
fn mock() -> Self {
|
||||
AuthSettings {
|
||||
jwt_secret: Some("mock_jwt_secret".to_string()),
|
||||
default_admin_username: Some("admin".to_string()),
|
||||
default_admin_password: Some("password".to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,4 +50,13 @@ impl FromConfig for DatabaseSettings {
|
||||
fn validate(&self) -> Result<(), String> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
fn mock() -> Self {
|
||||
DatabaseSettings {
|
||||
url: "sqlite::memory:".to_string(),
|
||||
max_connections: 5,
|
||||
migrate_on_startup: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ pub(crate) const SERVER_ADDRESS_KEY: &str = "SERVER.ADDRESS";
|
||||
pub(crate) const SERVER_PORT_KEY: &str = "SERVER.PORT";
|
||||
pub(crate) const SERVER_SERVE_OPENAPI_KEY: &str = "SERVER.SERVE_OPENAPI";
|
||||
pub(crate) const SERVER_CORS_ALLOWED_ORIGINS_KEY: &str = "SERVER.CORS.ALLOWED_ORIGINS";
|
||||
pub(crate) const SERVER_COOKIES_SECURE_KEY: &str = "SERVER.COOKIES.SECURE";
|
||||
//
|
||||
pub(crate) const DATABASE_URL_KEY: &str = "DATABASE.URL";
|
||||
pub(crate) const DATABASE_MAX_CONNECTIONS_KEY: &str = "DATABASE.MAX_CONNECTIONS";
|
||||
|
||||
@@ -49,4 +49,12 @@ impl FromConfig for LoggingSettings {
|
||||
fn validate(&self) -> Result<(), String> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
fn mock() -> Self {
|
||||
LoggingSettings {
|
||||
level: Level::INFO,
|
||||
utc: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ use std::net::IpAddr;
|
||||
use config::{Config, ConfigError};
|
||||
use tracing::warn;
|
||||
|
||||
use crate::configs::key::{SERVER_CORS_ALLOWED_ORIGINS_KEY, SERVER_SERVE_OPENAPI_KEY};
|
||||
use crate::configs::key::{SERVER_COOKIES_SECURE_KEY, SERVER_CORS_ALLOWED_ORIGINS_KEY, SERVER_SERVE_OPENAPI_KEY};
|
||||
|
||||
use super::{
|
||||
FromConfig,
|
||||
@@ -16,6 +16,7 @@ pub struct ServerSettings {
|
||||
pub port: u16,
|
||||
pub serve_openapi: bool,
|
||||
pub cors: CORSSettings,
|
||||
pub cookies: CookiesSettings,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -23,6 +24,11 @@ pub struct CORSSettings {
|
||||
pub allowed_origins: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct CookiesSettings {
|
||||
pub secure: bool,
|
||||
}
|
||||
|
||||
impl FromConfig for ServerSettings {
|
||||
fn from_config(_config: &Config) -> Result<Self, String> {
|
||||
Ok(ServerSettings {
|
||||
@@ -81,6 +87,24 @@ impl FromConfig for ServerSettings {
|
||||
})
|
||||
.collect(),
|
||||
},
|
||||
|
||||
cookies: CookiesSettings {
|
||||
secure: _config
|
||||
.get_bool(SERVER_COOKIES_SECURE_KEY)
|
||||
.inspect(|is_secure| {
|
||||
if !*is_secure {
|
||||
warn!("Cookie 'secure' flag is disabled; this is not recommended in production environments.");
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|err| {
|
||||
const DEFAULT_COOKIES_SECURE: bool = true;
|
||||
warn!(
|
||||
"{} not set or invalid in configuration, defaulting to {}. Error: {}",
|
||||
SERVER_COOKIES_SECURE_KEY, DEFAULT_COOKIES_SECURE, err
|
||||
);
|
||||
DEFAULT_COOKIES_SECURE
|
||||
}),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -91,4 +115,19 @@ impl FromConfig for ServerSettings {
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
fn mock() -> Self {
|
||||
ServerSettings {
|
||||
address: "0.0.0.0".parse().unwrap(),
|
||||
port: 8080,
|
||||
serve_openapi: false,
|
||||
cors: CORSSettings {
|
||||
allowed_origins: vec![],
|
||||
},
|
||||
cookies: CookiesSettings {
|
||||
secure: true,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user