fix(tests): also fix unit tests
This commit is contained in:
parent
2e83301d17
commit
33ae814a43
|
|
@ -88,6 +88,33 @@ pub async fn create_test_user(app: &Router) -> UserResponse {
|
||||||
serde_json::from_slice(&body).unwrap()
|
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 {
|
pub async fn login_user(app: &Router, username: &str, password: &str) -> String {
|
||||||
let login_data = json!({
|
let login_data = json!({
|
||||||
"username": username,
|
"username": username,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::models::{CreateUser, UpdateUser, UserResponse};
|
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 axum::http::StatusCode;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use tower::util::ServiceExt;
|
use tower::util::ServiceExt;
|
||||||
|
|
@ -9,8 +9,8 @@ mod tests {
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_list_users() {
|
async fn test_list_users() {
|
||||||
let (app, _container) = create_test_app().await;
|
let (app, _container) = create_test_app().await;
|
||||||
let user = create_test_user(&app).await;
|
let admin = create_admin_user(&app).await;
|
||||||
let token = login_user(&app, &user.username, "password123").await;
|
let token = login_user(&app, &admin.username, "adminpass123").await;
|
||||||
|
|
||||||
// Create another user
|
// Create another user
|
||||||
let user2_data = json!({
|
let user2_data = json!({
|
||||||
|
|
@ -51,21 +51,21 @@ mod tests {
|
||||||
let users: Vec<UserResponse> = serde_json::from_slice(&body).unwrap();
|
let users: Vec<UserResponse> = serde_json::from_slice(&body).unwrap();
|
||||||
|
|
||||||
assert_eq!(users.len(), 2);
|
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"));
|
assert!(users.iter().any(|u| u.username == "testuser2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_get_user_by_id() {
|
async fn test_get_user_by_id() {
|
||||||
let (app, _container) = create_test_app().await;
|
let (app, _container) = create_test_app().await;
|
||||||
let user = create_test_user(&app).await;
|
let admin = create_admin_user(&app).await;
|
||||||
let token = login_user(&app, &user.username, "password123").await;
|
let token = login_user(&app, &admin.username, "adminpass123").await;
|
||||||
|
|
||||||
let response = app
|
let response = app
|
||||||
.oneshot(
|
.oneshot(
|
||||||
axum::http::Request::builder()
|
axum::http::Request::builder()
|
||||||
.method("GET")
|
.method("GET")
|
||||||
.uri(format!("/api/users/{}", user.id))
|
.uri(format!("/api/users/{}", admin.id))
|
||||||
.header("Authorization", format!("Bearer {}", token))
|
.header("Authorization", format!("Bearer {}", token))
|
||||||
.body(axum::body::Body::empty())
|
.body(axum::body::Body::empty())
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
|
|
@ -80,16 +80,16 @@ mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let fetched_user: UserResponse = serde_json::from_slice(&body).unwrap();
|
let fetched_user: UserResponse = serde_json::from_slice(&body).unwrap();
|
||||||
|
|
||||||
assert_eq!(fetched_user.id, user.id);
|
assert_eq!(fetched_user.id, admin.id);
|
||||||
assert_eq!(fetched_user.username, user.username);
|
assert_eq!(fetched_user.username, admin.username);
|
||||||
assert_eq!(fetched_user.email, user.email);
|
assert_eq!(fetched_user.email, admin.email);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_create_user_via_api() {
|
async fn test_create_user_via_api() {
|
||||||
let (app, _container) = create_test_app().await;
|
let (app, _container) = create_test_app().await;
|
||||||
let admin = create_test_user(&app).await;
|
let admin = create_admin_user(&app).await;
|
||||||
let token = login_user(&app, &admin.username, "password123").await;
|
let token = login_user(&app, &admin.username, "adminpass123").await;
|
||||||
|
|
||||||
let new_user_data = CreateUser {
|
let new_user_data = CreateUser {
|
||||||
username: "newuser".to_string(),
|
username: "newuser".to_string(),
|
||||||
|
|
@ -125,8 +125,11 @@ mod tests {
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_update_user() {
|
async fn test_update_user() {
|
||||||
let (app, _container) = create_test_app().await;
|
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 user = create_test_user(&app).await;
|
||||||
let token = login_user(&app, &user.username, "password123").await;
|
|
||||||
|
|
||||||
let update_data = UpdateUser {
|
let update_data = UpdateUser {
|
||||||
username: Some("updateduser".to_string()),
|
username: Some("updateduser".to_string()),
|
||||||
|
|
@ -161,8 +164,11 @@ mod tests {
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_update_user_password() {
|
async fn test_update_user_password() {
|
||||||
let (app, _container) = create_test_app().await;
|
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 user = create_test_user(&app).await;
|
||||||
let token = login_user(&app, &user.username, "password123").await;
|
|
||||||
|
|
||||||
let update_data = UpdateUser {
|
let update_data = UpdateUser {
|
||||||
username: None,
|
username: None,
|
||||||
|
|
@ -187,15 +193,15 @@ mod tests {
|
||||||
assert_eq!(response.status(), StatusCode::OK);
|
assert_eq!(response.status(), StatusCode::OK);
|
||||||
|
|
||||||
// Verify new password works
|
// 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());
|
assert!(!new_token.is_empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_delete_user() {
|
async fn test_delete_user() {
|
||||||
let (app, _container) = create_test_app().await;
|
let (app, _container) = create_test_app().await;
|
||||||
let admin = create_test_user(&app).await;
|
let admin = create_admin_user(&app).await;
|
||||||
let token = login_user(&app, &admin.username, "password123").await;
|
let token = login_user(&app, &admin.username, "adminpass123").await;
|
||||||
|
|
||||||
// Create another user to delete
|
// Create another user to delete
|
||||||
let user2_data = json!({
|
let user2_data = json!({
|
||||||
|
|
@ -257,14 +263,14 @@ mod tests {
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_cannot_delete_self() {
|
async fn test_cannot_delete_self() {
|
||||||
let (app, _container) = create_test_app().await;
|
let (app, _container) = create_test_app().await;
|
||||||
let user = create_test_user(&app).await;
|
let admin = create_admin_user(&app).await;
|
||||||
let token = login_user(&app, &user.username, "password123").await;
|
let token = login_user(&app, &admin.username, "adminpass123").await;
|
||||||
|
|
||||||
let response = app
|
let response = app
|
||||||
.oneshot(
|
.oneshot(
|
||||||
axum::http::Request::builder()
|
axum::http::Request::builder()
|
||||||
.method("DELETE")
|
.method("DELETE")
|
||||||
.uri(format!("/api/users/{}", user.id))
|
.uri(format!("/api/users/{}", admin.id))
|
||||||
.header("Authorization", format!("Bearer {}", token))
|
.header("Authorization", format!("Bearer {}", token))
|
||||||
.body(axum::body::Body::empty())
|
.body(axum::body::Body::empty())
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue