Refactor tests to improve response parsing and validation

- Introduced a new common module with response helper functions to streamline response parsing across tests.
- Updated role controller tests to assert success messages in responses for create, update, and delete operations.
- Enhanced role service tests to validate response structures and ensure proper error handling.
- Modified team controller and service tests to check for success messages and validate response data formats.
- Improved user controller and service tests to include success message assertions and error handling for invalid inputs.
- Ensured all tests utilize the new response parsing functions for consistency and maintainability.
This commit is contained in:
MythEclipse
2025-10-05 16:00:46 +07:00
parent a32f54873b
commit 9cecc8fa05
25 changed files with 893 additions and 512 deletions
@@ -16,6 +16,9 @@ mod tests {
let response = EventsService::get_event_list(&app_state, get_meta_request_dto(1, 10))
.await;
assert_eq!(response.status(), 200);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 8192).await;
let list = if let Some(d) = body_json.get("data") { d } else { &body_json };
assert!(list.is_array(), "expected event list to be an array");
}
#[tokio::test]
@@ -54,6 +57,9 @@ mod tests {
// Verify response
assert_eq!(response.status(), 200);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 4096).await;
let data = body_json.get("data").expect("expected data in OK response").clone();
assert_eq!(data["name"].as_str().unwrap(), "Test Event");
// Clean up
let _ = repo.query_delete_event(event_id).await;
@@ -72,6 +78,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), 404);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
}
#[tokio::test]
@@ -97,6 +105,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), 201);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("data").is_some() || v.get("message").is_some(), "expected data or message in CREATED response");
// Verify event was created in database
let created_events = repo.query_event_list(get_meta_request_dto(1, 10)).await.unwrap();
@@ -133,6 +143,8 @@ mod tests {
// Verify bad request response (validation error)
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
@@ -186,6 +198,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), 200);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify event was updated in database
let updated_event = repo
@@ -225,6 +239,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
@@ -267,6 +283,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), 200);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify event was soft-deleted from database
let deleted_event = repo.query_event_by_id(event_id.clone()).await;
@@ -288,5 +306,7 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
}
@@ -13,6 +13,9 @@ mod tests {
let app_state = crate::get_app_state().await;
let response = EventsService::get_event_list(&app_state, get_meta_request_dto(1, 10)).await;
assert_eq!(response.status(), 200);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 8192).await;
let list = if let Some(d) = body_json.get("data") { d } else { &body_json };
assert!(list.is_array(), "expected event list to be an array");
}
#[tokio::test]
@@ -20,6 +23,8 @@ mod tests {
let app_state = crate::get_app_state().await;
let response = EventsService::get_event_by_id(&app_state, "non-existent-uuid-123456789".to_string()).await;
assert_eq!(response.status(), 404);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
}
#[tokio::test]
@@ -37,6 +42,8 @@ mod tests {
};
let response = EventsService::create_event(&app_state, event_request).await;
assert_eq!(response.status(), 201);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("data").is_some() || v.get("message").is_some(), "expected data or message in CREATED response");
}
#[tokio::test]
@@ -54,6 +61,8 @@ mod tests {
};
let response = EventsService::create_event(&app_state, event_request).await;
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
@@ -71,6 +80,8 @@ mod tests {
};
let response = EventsService::update_event(&app_state, "non-existent-uuid-123456789".to_string(), update_request).await;
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
@@ -78,6 +89,8 @@ mod tests {
let app_state = crate::get_app_state().await;
let response = EventsService::delete_event(&app_state, "non-existent-uuid-123456789".to_string()).await;
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
async fn test_get_event_by_id_service_found() {
@@ -113,8 +126,11 @@ mod tests {
let response = EventsService::get_event_by_id(&app_state, event_id.clone())
.await;
// Verify response
// Verify response (status + body)
assert_eq!(response.status(), 200);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 4096).await;
let data = body_json.get("data").expect("expected data in OK response").clone();
assert_eq!(data["name"].as_str().unwrap(), "Test Event");
// Clean up
let _ = repo.query_delete_event(event_id).await;
@@ -171,6 +187,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), 200);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify event was updated in database
let updated_event = repo
@@ -210,6 +228,8 @@ mod tests {
// Verify bad request response (validation error)
assert_eq!(response.status(), 400);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
}
#[tokio::test]
@@ -252,6 +272,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), 200);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify event was soft-deleted from database
let deleted_event = repo.query_event_by_id(event_id.clone()).await;
@@ -333,6 +355,9 @@ mod tests {
};
let response = EventsService::get_event_list(&app_state, meta).await;
assert_eq!(response.status(), 200);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 8192).await;
let list = if let Some(d) = body_json.get("data") { d } else { &body_json };
assert!(list.is_array(), "expected event list to be an array");
// Clean up - delete all created events
let events = repo.query_event_list(crate::get_meta_request_dto(1, 10)).await.unwrap();
@@ -51,6 +51,9 @@ mod tests {
// Verify response
assert_eq!(response.status(), StatusCode::OK);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 8192).await;
let list = if let Some(d) = body_json.get("data") { d } else { &body_json };
assert!(list.is_array(), "expected testimonial list to be an array");
// Clean up
for name in testimonial_names {
@@ -102,6 +105,9 @@ mod tests {
// Verify response
assert_eq!(response.status(), StatusCode::OK);
let body_json: serde_json::Value = crate::common::response_helpers::parse_response_value(response, 4096).await;
let data = body_json.get("data").expect("expected data in OK response").clone();
assert_eq!(data["content"].as_str().unwrap(), "Great testimonial content");
// Clean up
let _ = repo.query_delete_testimonial(testimonial_id).await;
@@ -121,6 +127,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
}
#[tokio::test]
@@ -154,6 +162,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), StatusCode::CREATED);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("data").is_some() || v.get("message").is_some(), "expected data or message in CREATED response");
// Verify testimonial was created in database
let created_testimonials = repo.query_testimonial_list(get_meta_request_dto(1, 10)).await.unwrap();
@@ -198,6 +208,8 @@ mod tests {
// Verify bad request response (validation error)
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -254,6 +266,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), StatusCode::OK);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify testimonial was updated in database
let updated_testimonial = repo
@@ -298,6 +312,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -349,6 +365,8 @@ mod tests {
// Verify response
assert_eq!(response.status(), StatusCode::OK);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify testimonial was soft-deleted from database
let deleted_testimonial = repo.query_testimonial_by_id(testimonial_id.clone()).await;
@@ -382,6 +400,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -416,6 +436,8 @@ mod tests {
// Should succeed (boundary)
assert_eq!(response.status(), StatusCode::CREATED);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
assert!(v.get("data").is_some() || v.get("message").is_some(), "expected data or message in CREATED response");
// Verify testimonial was created
let created_testimonials = repo.query_testimonial_list(get_meta_request_dto(1, 10)).await.unwrap();
@@ -460,6 +482,8 @@ mod tests {
// Should fail validation
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -494,6 +518,8 @@ mod tests {
// Should fail validation
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -548,6 +574,8 @@ mod tests {
// Should succeed
assert_eq!(response.status(), StatusCode::OK);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify testimonial was updated
let updated_testimonial = repo
@@ -610,6 +638,8 @@ mod tests {
// Should fail validation
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = repo.query_delete_testimonial(testimonial_id).await;
@@ -49,8 +49,12 @@ mod tests {
let response = TestimonialsService::get_testimonial_list(&app_state, get_meta_request_dto(1, 10))
.await;
// Verify response
// Verify response (status + body)
assert_eq!(response.status(), StatusCode::OK);
let body_json: serde_json::Value =
crate::common::response_helpers::parse_response_value(response, 8192).await;
let list = if let Some(d) = body_json.get("data") { d } else { &body_json };
assert!(list.is_array(), "expected testimonial list to be an array");
// Clean up
for content in testimonial_contents {
@@ -105,8 +109,8 @@ mod tests {
assert_eq!(response.status(), StatusCode::OK);
// Verify response body contains correct data
let body_bytes = response.into_body().collect().await.unwrap().to_bytes();
let response_body: serde_json::Value = serde_json::from_slice(&body_bytes).unwrap();
let response_body: serde_json::Value =
crate::common::response_helpers::parse_response_value(response, 8192).await;
assert_eq!(response_body["data"]["content"].as_str().unwrap(), testimonial_content);
// Clean up
@@ -127,6 +131,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
}
#[tokio::test]
@@ -172,6 +178,8 @@ mod tests {
// Verify not found response (service should filter out deleted items)
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -203,8 +211,11 @@ mod tests {
)
.await;
// Verify response
// Verify response (status + body)
assert_eq!(response.status(), StatusCode::CREATED);
let v = crate::common::response_helpers::parse_response_value(response, 4096).await;
// either data or message expected depending on implementation
assert!(v.get("data").is_some() || v.get("message").is_some(), "expected data or message in CREATED response");
// Verify testimonial was created in database
let created_testimonials = repo.query_testimonial_list(get_meta_request_dto(1, 10)).await.unwrap();
@@ -247,6 +258,8 @@ mod tests {
// Verify bad request response (validation error)
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -301,8 +314,10 @@ mod tests {
)
.await;
// Verify response
// Verify response (status + body)
assert_eq!(response.status(), StatusCode::OK);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify testimonial was updated in database
let updated_testimonial = repo
@@ -347,6 +362,8 @@ mod tests {
// Verify not found response
assert_eq!(response.status(), StatusCode::NOT_FOUND);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in NOT_FOUND response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -403,6 +420,8 @@ mod tests {
// Verify bad request response (should fail because it's deleted)
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -453,7 +472,10 @@ mod tests {
.await;
// Verify response
// Verify response (status + body)
assert_eq!(response.status(), StatusCode::OK);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some() || v.get("data").is_some(), "expected message or data in OK response");
// Verify testimonial was soft-deleted from database
let deleted_testimonial = repo.query_testimonial_by_id(testimonial_id.clone()).await;
@@ -487,6 +509,8 @@ mod tests {
// Verify bad request response
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;
@@ -537,6 +561,8 @@ mod tests {
// Verify bad request response (should fail because it's already deleted)
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
let v = crate::common::response_helpers::parse_response_value(response, 2048).await;
assert!(v.get("message").and_then(|m| m.as_str()).is_some(), "expected message in BAD_REQUEST response");
// Clean up
let _ = UsersRepository::new(&app_state).query_delete_user(user.id.id.to_raw()).await;