Skip to content

Commit e8c12c8

Browse files
authored
Merge pull request #6 from intelliDean/rev
Rev
2 parents b58acbb + 646a112 commit e8c12c8

63 files changed

Lines changed: 1097 additions & 843 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 123 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ openssl = { version = "0.10", features = ["vendored"] }
4242
secrecy = { version = "0.10", features = ["serde"] }
4343
reqwest = { version = "0.12.23", features = ["json", "native-tls"] }
4444
rand = "0.7.3"
45-
lettre = "0.11.18"
45+
lettre = { version = "0.11.18", default-features = false }
4646
url = "2.5.7"
4747
tower_governor = "0.8.0"
4848
axum-prometheus = "0.10.0"

bin/payego/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ use crate::utility::logging::setup_logging;
1212
use crate::utility::server::serve;
1313
use crate::utility::tasks::{build_router, initialize_system, load_env};
1414
use eyre::Report;
15+
use payego_core::app_state::AppState;
1516
use payego_primitives::models::app_config::AppConfig;
16-
use payego_primitives::models::app_state::AppState;
1717
use tracing::info;
1818

1919
pub async fn run() -> Result<(), Report> {

bin/payego/src/utility/clean_up_tasks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use diesel::ExpressionMethods;
22
use diesel::QueryDsl;
33
use diesel::RunQueryDsl;
4-
use payego_primitives::models::app_state::AppState;
4+
use payego_core::AppState;
55
use payego_primitives::schema::{blacklisted_tokens, refresh_tokens};
66
use std::sync::Arc;
77
use std::time::Duration;

bin/payego/src/utility/tasks.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use axum_prometheus::{metrics_exporter_prometheus::PrometheusHandle, PrometheusM
66
use eyre::Report;
77
use http::HeaderValue;
88
use payego_api::handlers::initialize_banks::initialize_banks;
9-
use payego_primitives::models::app_state::AppState;
9+
use payego_core::app_state::AppState;
1010
use std::sync::Arc;
1111
use tower_http::cors::{Any, CorsLayer};
1212
use tracing::info;

bin/payego/tests/audit_tests.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
mod common;
2+
3+
use axum_test::TestServer;
4+
use common::{create_test_app, create_test_app_state, create_test_user};
5+
use diesel::prelude::*;
6+
use payego_primitives::models::entities::audit_log::AuditLog;
7+
use payego_primitives::schema::audit_logs;
8+
use serial_test::serial;
9+
10+
#[tokio::test]
11+
#[serial]
12+
async fn test_audit_log_on_registration() {
13+
let state = create_test_app_state();
14+
let app = create_test_app(state.clone());
15+
let server = TestServer::new(app).unwrap();
16+
17+
let email = format!("audit_test_{}@example.com", uuid::Uuid::new_v4());
18+
19+
// Perform registration
20+
let _ = create_test_user(&server, &email).await;
21+
22+
// Verify audit log
23+
let mut conn = state.db.get().unwrap();
24+
let logs: Vec<AuditLog> = audit_logs::table
25+
.filter(audit_logs::event_type.eq("auth.register"))
26+
.load(&mut conn)
27+
.unwrap();
28+
29+
assert!(!logs.is_empty());
30+
let log = logs
31+
.iter()
32+
.find(|l| l.metadata["email"] == email)
33+
.expect("Audit log for registration not found");
34+
assert_eq!(log.event_type, "auth.register");
35+
}
36+
37+
#[tokio::test]
38+
#[serial]
39+
async fn test_audit_log_on_login() {
40+
let state = create_test_app_state();
41+
let app = create_test_app(state.clone());
42+
let server = TestServer::new(app).unwrap();
43+
44+
let email = format!("login_audit_{}@example.com", uuid::Uuid::new_v4());
45+
let _ = create_test_user(&server, &email).await;
46+
47+
// Perform login
48+
let response = server
49+
.post("/api/auth/login")
50+
.json(&serde_json::json!({
51+
"email": email,
52+
"password": "SecurePass123!"
53+
}))
54+
.await;
55+
56+
response.assert_status(axum::http::StatusCode::OK);
57+
58+
// Verify audit log
59+
let mut conn = state.db.get().unwrap();
60+
let logs: Vec<AuditLog> = audit_logs::table
61+
.filter(audit_logs::event_type.eq("auth.login.success"))
62+
.load(&mut conn)
63+
.unwrap();
64+
65+
assert!(!logs.is_empty());
66+
}

bin/payego/tests/auth_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
mod common;
22

33
use common::create_test_app_state;
4-
use payego_primitives::config::security_config::SecurityConfig;
4+
use payego_core::SecurityConfig;
55
use serial_test::serial;
66

77
#[tokio::test]

bin/payego/tests/bank_service_test.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use payego_primitives::models::BankRequest;
66
use payego_primitives::schema::{bank_accounts, banks, users};
77
use serde_json::json;
88
use serial_test::serial;
9-
use std::sync::Arc;
109
use uuid::Uuid;
1110
use wiremock::matchers::{method, path};
1211
use wiremock::{Mock, MockServer, ResponseTemplate};
@@ -51,9 +50,11 @@ async fn test_add_bank_account_success() {
5150
.await;
5251

5352
// 3. Setup AppState
54-
let mut base_state = (*common::create_test_app_state()).clone();
55-
base_state.config.paystack_details.paystack_api_url = base_url.clone();
56-
let state = Arc::new(base_state);
53+
let base_state = common::create_test_app_state();
54+
let mut config = base_state.config.clone();
55+
config.paystack_details.paystack_api_url = base_url.clone();
56+
let state = payego_core::AppState::new(base_state.db.clone(), config)
57+
.expect("Failed to create AppState");
5758

5859
let pool = &state.db;
5960
let conn = &mut pool.get().unwrap();
@@ -107,6 +108,10 @@ async fn test_add_bank_account_success() {
107108
// Removed assertion for paystack_recipient_code if it doesn't exist on BankAccount struct
108109

109110
// 6. Cleanup
111+
use payego_primitives::schema::audit_logs;
112+
diesel::delete(audit_logs::table.filter(audit_logs::user_id.eq(user_id)))
113+
.execute(conn)
114+
.unwrap();
110115
diesel::delete(bank_accounts::table.filter(bank_accounts::user_id.eq(user_id)))
111116
.execute(conn)
112117
.unwrap();

0 commit comments

Comments
 (0)