#![ allow( clippy::uninlined_format_args ) ]
use api_openai::ClientApiAccessors;
use super::shared::{ *, IsolatedClient };
#[ tokio::test ]
#[ allow( deprecated ) ]
async fn retrieve_response()
{
let isolated_client = IsolatedClient::new("retrieve_response", true)
.expect("Failed to create isolated client");
let client = isolated_client.client();
let create_request = create_basic_test_request();
let create_result = client.responses().create(create_request).await;
match create_result
{
Ok(created_response) =>
{
let retrieve_result = client.responses().retrieve(&created_response.id).await;
match retrieve_result
{
Ok(retrieved_response) =>
{
assert_eq!(retrieved_response.id, created_response.id, "Retrieved response should have same ID");
assert_valid_response(&retrieved_response);
},
Err(e) =>
{
panic!("Failed to retrieve response : {e:?}");
}
}
},
Err(e) =>
{
panic!("Failed to create response for retrieval test : {e:?}");
}
}
}
#[ tokio::test ]
#[ allow( deprecated ) ]
async fn list_response_input_items()
{
let isolated_client = IsolatedClient::new("list_response_input_items", true)
.expect("Failed to create isolated client");
let client = isolated_client.client();
let create_request = create_basic_test_request();
let create_result = client.responses().create(create_request).await;
match create_result
{
Ok(created_response) =>
{
let list_query = ListQuery { limit : None };
let list_result = client.responses().list_input_items(&created_response.id, Some(list_query)).await;
match list_result
{
Ok(item_list) =>
{
assert_eq!(item_list.object, "list", "Object type should be 'list'");
},
Err(e) =>
{
panic!("Failed to list response input items : {:?}", e);
}
}
},
Err(e) =>
{
panic!("Failed to create response for list test : {:?}", e);
}
}
}
#[ tokio::test ]
#[ allow( deprecated ) ]
async fn delete_response()
{
let isolated_client = IsolatedClient::new("delete_response", true)
.expect("Failed to create isolated client");
let client = isolated_client.client();
let create_request = create_basic_test_request();
let create_result = client.responses().create(create_request).await;
match create_result
{
Ok(created_response) =>
{
let delete_result = client.responses().delete(&created_response.id).await;
match delete_result
{
Ok(delete_confirmation) =>
{
if let Some(id) = delete_confirmation.get("id")
{
assert_eq!(id.as_str().unwrap_or(""), created_response.id, "Deleted response should have same ID");
}
if let Some(object) = delete_confirmation.get("object")
{
assert_eq!(object.as_str().unwrap_or(""), "response.deleted", "Object should indicate deletion");
}
if let Some(deleted) = delete_confirmation.get("deleted")
{
assert!(deleted.as_bool().unwrap_or(false), "Deleted field should be true");
}
},
Err(e) =>
{
panic!("Failed to delete response : {:?}", e);
}
}
},
Err(e) =>
{
panic!("Failed to create response for deletion test : {:?}", e);
}
}
}
#[ tokio::test ]
#[ allow( deprecated ) ]
async fn update_response()
{
let isolated_client = IsolatedClient::new("update_response", true)
.expect("Failed to create isolated client");
let client = isolated_client.client();
let create_request = create_basic_test_request();
let create_result = client.responses().create(create_request).await;
match create_result
{
Ok(created_response) =>
{
let metadata = json!({
"updated": true,
"test": "update_test"
});
let update_result = client.responses().update(&created_response.id, metadata).await;
match update_result
{
Ok(updated_response) =>
{
assert_eq!(updated_response.id, created_response.id, "Updated response should have same ID");
assert_valid_response(&updated_response);
},
Err(e) =>
{
let error_msg = format!("{e:?}");
if error_msg.contains("405") || error_msg.contains("Method Not Allowed")
{
println!("Update operation correctly rejected by API (responses are immutable)");
}
else
{
panic!("Failed to update response : {e:?}");
}
}
}
},
Err(e) =>
{
panic!("Failed to create response for update test : {e:?}");
}
}
}
#[ tokio::test ]
#[ allow( deprecated ) ]
async fn cancel_response()
{
let isolated_client = IsolatedClient::new("cancel_response", true)
.expect("Failed to create isolated client");
let client = isolated_client.client();
let cancel_request = CreateResponseRequest::former()
.model(ModelIdsResponses::from("gpt-5-nano".to_string()))
.input(ResponseInput::String("Write a very long story about artificial intelligence, make it at least 500 words.".to_string()))
.max_output_tokens(1000)
.form();
let create_result = client.responses().create(cancel_request).await;
match create_result
{
Ok(created_response) =>
{
let cancel_result = client.responses().cancel(&created_response.id).await;
match cancel_result
{
Ok(cancelled_response) =>
{
assert_eq!(cancelled_response.id, created_response.id, "Cancelled response should have same ID");
assert!(
cancelled_response.status == "completed" || cancelled_response.status == "cancelled",
"Response status should be completed or cancelled, got : {}",
cancelled_response.status
);
},
Err(e) =>
{
println!("Cancel failed (response might be completed): {:?}", e);
}
}
},
Err(e) =>
{
panic!("Failed to create response for cancellation test : {:?}", e);
}
}
}