use anycms_core::{ApiResult, ResponseData, ResultPagination};
use serde::Serialize;
use serde_json::json;
#[derive(Debug, Serialize, PartialEq)]
struct User {
id: u32,
name: String,
}
#[test]
fn test_single_value_serialization() {
let user = User {
id: 1,
name: "Alice".to_string(),
};
let result: ApiResult<User> = ApiResult::value(user);
let json = serde_json::to_value(&result).unwrap();
let expected = json!({
"success": true,
"data": {
"id": 1,
"name": "Alice"
}
});
assert_eq!(json, expected);
}
#[test]
fn test_list_serialization() {
let users = vec![
User {
id: 1,
name: "Alice".to_string(),
},
User {
id: 2,
name: "Bob".to_string(),
},
];
let pagination = ResultPagination::new(100, 1, 10);
let result: ApiResult<User> = ApiResult::list(users).with_pagination(pagination);
let json = serde_json::to_value(&result).unwrap();
let expected = json!({
"success": true,
"data": [
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
],
"pagination": {
"total": 100,
"page": 1,
"pageSize": 10,
"currentPage": 1
}
});
assert_eq!(json, expected);
}
#[test]
fn test_empty_success() {
let result: ApiResult<()> = ApiResult::ok();
let json = serde_json::to_value(&result).unwrap();
let expected = json!({
"success": true
});
assert_eq!(json, expected);
}
#[test]
fn test_error_response() {
let result: ApiResult<User> = ApiResult::failure("User not found").with_code(404);
let json = serde_json::to_value(&result).unwrap();
let expected = json!({
"success": false,
"message": "User not found",
"code": 404
});
assert_eq!(json, expected);
}
#[test]
fn test_response_data_single() {
let user = User {
id: 1,
name: "Alice".to_string(),
};
let data = ResponseData::single(user);
let json = serde_json::to_value(&data).unwrap();
let expected = json!({
"id": 1,
"name": "Alice"
});
assert_eq!(json, expected);
assert!(data.is_single());
assert!(!data.is_multiple());
}
#[test]
fn test_response_data_multiple() {
let users = vec![
User {
id: 1,
name: "Alice".to_string(),
},
User {
id: 2,
name: "Bob".to_string(),
},
];
let data = ResponseData::multiple(users);
let json = serde_json::to_value(&data).unwrap();
let expected = json!([
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
]);
assert_eq!(json, expected);
assert!(!data.is_single());
assert!(data.is_multiple());
}
#[test]
fn test_with_extra() {
let user = User {
id: 1,
name: "Alice".to_string(),
};
let result: ApiResult<User> = ApiResult::value(user)
.with_extra("timestamp", serde_json::json!(1234567890))
.with_extra("version", serde_json::json!("1.0.0"));
let json = serde_json::to_value(&result).unwrap();
let expected = json!({
"success": true,
"data": {
"id": 1,
"name": "Alice"
},
"extra": {
"timestamp": 1234567890,
"version": "1.0.0"
}
});
assert_eq!(json, expected);
}