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"); } }