Implement SaveListItemRequest and SaveListItemResponse models. Add save_list_item (create/update via PUT) and delete_list_item methods. Tests cover creating, updating, deleting list items and not-found error.
87 lines
2.5 KiB
Rust
87 lines
2.5 KiB
Rust
mod common;
|
|
|
|
use uuid::Uuid;
|
|
use wiremock::matchers::{method, path};
|
|
use wiremock::{Mock, ResponseTemplate};
|
|
|
|
#[tokio::test]
|
|
async fn test_save_list_item_create() {
|
|
let (mock_server, client) = common::setup().await;
|
|
let new_id = Uuid::new_v4();
|
|
|
|
Mock::given(method("PUT"))
|
|
.and(path("/Lists/id/10/items"))
|
|
.respond_with(ResponseTemplate::new(201).set_body_json(serde_json::json!({
|
|
"id": new_id.to_string()
|
|
})))
|
|
.mount(&mock_server)
|
|
.await;
|
|
|
|
let request = onspring::models::list::SaveListItemRequest {
|
|
id: None,
|
|
name: "New Item".to_string(),
|
|
numeric_value: Some(1.0),
|
|
color: Some("#ff0000".to_string()),
|
|
};
|
|
let result = client.save_list_item(10, request).await.unwrap();
|
|
assert_eq!(result.id, new_id);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_save_list_item_update() {
|
|
let (mock_server, client) = common::setup().await;
|
|
let existing_id = Uuid::new_v4();
|
|
|
|
Mock::given(method("PUT"))
|
|
.and(path("/Lists/id/10/items"))
|
|
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
|
"id": existing_id.to_string()
|
|
})))
|
|
.mount(&mock_server)
|
|
.await;
|
|
|
|
let request = onspring::models::list::SaveListItemRequest {
|
|
id: Some(existing_id),
|
|
name: "Updated Item".to_string(),
|
|
numeric_value: None,
|
|
color: None,
|
|
};
|
|
let result = client.save_list_item(10, request).await.unwrap();
|
|
assert_eq!(result.id, existing_id);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_delete_list_item() {
|
|
let (mock_server, client) = common::setup().await;
|
|
let item_id = Uuid::new_v4();
|
|
|
|
Mock::given(method("DELETE"))
|
|
.and(path(format!("/Lists/id/10/itemId/{}", item_id)))
|
|
.respond_with(ResponseTemplate::new(204))
|
|
.mount(&mock_server)
|
|
.await;
|
|
|
|
let result = client.delete_list_item(10, item_id).await;
|
|
assert!(result.is_ok());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_delete_list_item_not_found() {
|
|
let (mock_server, client) = common::setup().await;
|
|
let item_id = Uuid::new_v4();
|
|
|
|
Mock::given(method("DELETE"))
|
|
.and(path(format!("/Lists/id/10/itemId/{}", item_id)))
|
|
.respond_with(ResponseTemplate::new(404))
|
|
.mount(&mock_server)
|
|
.await;
|
|
|
|
let result = client.delete_list_item(10, item_id).await;
|
|
assert!(result.is_err());
|
|
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
|
assert_eq!(status_code, 404);
|
|
} else {
|
|
panic!("Expected Api error");
|
|
}
|
|
}
|