From 6834e11542135a3fd65bea6ddbb8130f5263eaf4 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Sun, 22 Jun 2025 21:31:11 +0000 Subject: [PATCH] fix(tests): also fix unit tests --- src/tests/helpers.rs | 27 +++++++++++++++++++++++ src/tests/users_tests.rs | 46 +++++++++++++++++++++++----------------- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/src/tests/helpers.rs b/src/tests/helpers.rs index 51114cb..fda2e34 100644 --- a/src/tests/helpers.rs +++ b/src/tests/helpers.rs @@ -88,6 +88,33 @@ pub async fn create_test_user(app: &Router) -> UserResponse { serde_json::from_slice(&body).unwrap() } +pub async fn create_admin_user(app: &Router) -> UserResponse { + let admin_data = json!({ + "username": "adminuser", + "email": "admin@example.com", + "password": "adminpass123", + "role": "admin" + }); + + let response = app + .clone() + .oneshot( + axum::http::Request::builder() + .method("POST") + .uri("/api/auth/register") + .header("Content-Type", "application/json") + .body(axum::body::Body::from(serde_json::to_vec(&admin_data).unwrap())) + .unwrap(), + ) + .await + .unwrap(); + + let body = axum::body::to_bytes(response.into_body(), usize::MAX) + .await + .unwrap(); + serde_json::from_slice(&body).unwrap() +} + pub async fn login_user(app: &Router, username: &str, password: &str) -> String { let login_data = json!({ "username": username, diff --git a/src/tests/users_tests.rs b/src/tests/users_tests.rs index eb619eb..9bf4831 100644 --- a/src/tests/users_tests.rs +++ b/src/tests/users_tests.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod tests { use crate::models::{CreateUser, UpdateUser, UserResponse}; - use super::super::helpers::{create_test_app, create_test_user, login_user}; + use super::super::helpers::{create_test_app, create_test_user, create_admin_user, login_user}; use axum::http::StatusCode; use serde_json::json; use tower::util::ServiceExt; @@ -9,8 +9,8 @@ mod tests { #[tokio::test] async fn test_list_users() { let (app, _container) = create_test_app().await; - let user = create_test_user(&app).await; - let token = login_user(&app, &user.username, "password123").await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; // Create another user let user2_data = json!({ @@ -51,21 +51,21 @@ mod tests { let users: Vec = serde_json::from_slice(&body).unwrap(); assert_eq!(users.len(), 2); - assert!(users.iter().any(|u| u.username == "testuser")); + assert!(users.iter().any(|u| u.username == "adminuser")); assert!(users.iter().any(|u| u.username == "testuser2")); } #[tokio::test] async fn test_get_user_by_id() { let (app, _container) = create_test_app().await; - let user = create_test_user(&app).await; - let token = login_user(&app, &user.username, "password123").await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; let response = app .oneshot( axum::http::Request::builder() .method("GET") - .uri(format!("/api/users/{}", user.id)) + .uri(format!("/api/users/{}", admin.id)) .header("Authorization", format!("Bearer {}", token)) .body(axum::body::Body::empty()) .unwrap(), @@ -80,16 +80,16 @@ mod tests { .unwrap(); let fetched_user: UserResponse = serde_json::from_slice(&body).unwrap(); - assert_eq!(fetched_user.id, user.id); - assert_eq!(fetched_user.username, user.username); - assert_eq!(fetched_user.email, user.email); + assert_eq!(fetched_user.id, admin.id); + assert_eq!(fetched_user.username, admin.username); + assert_eq!(fetched_user.email, admin.email); } #[tokio::test] async fn test_create_user_via_api() { let (app, _container) = create_test_app().await; - let admin = create_test_user(&app).await; - let token = login_user(&app, &admin.username, "password123").await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; let new_user_data = CreateUser { username: "newuser".to_string(), @@ -125,8 +125,11 @@ mod tests { #[tokio::test] async fn test_update_user() { let (app, _container) = create_test_app().await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; + + // Create a regular user to update let user = create_test_user(&app).await; - let token = login_user(&app, &user.username, "password123").await; let update_data = UpdateUser { username: Some("updateduser".to_string()), @@ -161,8 +164,11 @@ mod tests { #[tokio::test] async fn test_update_user_password() { let (app, _container) = create_test_app().await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; + + // Create a regular user to update let user = create_test_user(&app).await; - let token = login_user(&app, &user.username, "password123").await; let update_data = UpdateUser { username: None, @@ -187,15 +193,15 @@ mod tests { assert_eq!(response.status(), StatusCode::OK); // Verify new password works - let new_token = login_user(&app, &user.username, "newpassword456").await; + let new_token = login_user(&app, "testuser", "newpassword456").await; assert!(!new_token.is_empty()); } #[tokio::test] async fn test_delete_user() { let (app, _container) = create_test_app().await; - let admin = create_test_user(&app).await; - let token = login_user(&app, &admin.username, "password123").await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; // Create another user to delete let user2_data = json!({ @@ -257,14 +263,14 @@ mod tests { #[tokio::test] async fn test_cannot_delete_self() { let (app, _container) = create_test_app().await; - let user = create_test_user(&app).await; - let token = login_user(&app, &user.username, "password123").await; + let admin = create_admin_user(&app).await; + let token = login_user(&app, &admin.username, "adminpass123").await; let response = app .oneshot( axum::http::Request::builder() .method("DELETE") - .uri(format!("/api/users/{}", user.id)) + .uri(format!("/api/users/{}", admin.id)) .header("Authorization", format!("Bearer {}", token)) .body(axum::body::Body::empty()) .unwrap(),