mod integration_common;
use integration_common::*;
use onspring::SaveFileRequest;
#[tokio::test]
#[ignore]
async fn get_file_info_for_attachment_should_return_info() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_id = required_env_i32("TEST_ATTACHMENT");
let info = client
.get_file_info(record_id, field_id, file_id)
.await
.unwrap();
assert!(info.name.is_some());
assert!(info.content_type.is_some());
assert!(info.created_date.is_some());
assert!(info.modified_date.is_some());
assert!(info.file_href.is_some());
assert!(info.owner.is_some());
assert!(info.file_type.is_some());
}
#[tokio::test]
#[ignore]
async fn get_file_info_for_image_should_return_info() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_IMAGE_FIELD");
let file_id = required_env_i32("TEST_IMAGE");
let info = client
.get_file_info(record_id, field_id, file_id)
.await
.unwrap();
assert!(info.name.is_some());
assert!(info.content_type.is_some());
assert!(info.created_date.is_some());
assert!(info.modified_date.is_some());
assert!(info.file_href.is_some());
assert!(info.owner.is_some());
assert!(info.file_type.is_some());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_for_non_file_field() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_TEXT_FIELD");
let file_id = required_env_i32("TEST_ATTACHMENT");
let result = client.get_file_info(record_id, field_id, file_id).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_with_invalid_api_key() {
let client = build_client_with_key("invalid");
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_id = required_env_i32("TEST_ATTACHMENT");
let result = client.get_file_info(record_id, field_id, file_id).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_when_no_field_access() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD_NO_ACCESS_FIELD");
let result = client.get_file_info(1, field_id, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_when_no_app_access() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD_NO_ACCESS_APP");
let result = client.get_file_info(1, field_id, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_when_field_not_found() {
let client = build_client();
let result = client.get_file_info(1, 0, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_info_should_fail_when_record_not_found() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let result = client.get_file_info(0, field_id, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn get_file_for_attachment_should_return_file() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_id = required_env_i32("TEST_ATTACHMENT");
let response = client.get_file(record_id, field_id, file_id).await.unwrap();
assert!(response.content_type.is_some());
assert!(response.file_name.is_some());
assert!(!response.data.is_empty());
}
#[tokio::test]
#[ignore]
async fn get_file_for_image_should_return_file() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_IMAGE_FIELD");
let file_id = required_env_i32("TEST_IMAGE");
let response = client.get_file(record_id, field_id, file_id).await.unwrap();
assert!(response.content_type.is_some());
assert!(response.file_name.is_some());
assert!(!response.data.is_empty());
}
#[tokio::test]
#[ignore]
async fn get_file_should_fail_with_invalid_api_key() {
let client = build_client_with_key("invalid");
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_id = required_env_i32("TEST_ATTACHMENT");
let result = client.get_file(record_id, field_id, file_id).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn upload_file_to_attachment_field_should_succeed() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_data = std::fs::read("tests/test_data/test-attachment.txt").unwrap();
let request = SaveFileRequest {
record_id,
field_id,
notes: Some("integration test".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test-attachment.txt".to_string(),
file_data,
content_type: "text/plain".to_string(),
};
let response = client.upload_file(request).await.unwrap();
assert!(response.id > 0);
let _ = client.delete_file(record_id, field_id, response.id).await;
}
#[tokio::test]
#[ignore]
async fn upload_file_to_image_field_should_succeed() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_IMAGE_FIELD");
let file_data = std::fs::read("tests/test_data/test-image.jpeg").unwrap();
let request = SaveFileRequest {
record_id,
field_id,
notes: Some("integration test".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test-image.jpeg".to_string(),
file_data,
content_type: "image/jpeg".to_string(),
};
let response = client.upload_file(request).await.unwrap();
assert!(response.id > 0);
let _ = client.delete_file(record_id, field_id, response.id).await;
}
#[tokio::test]
#[ignore]
async fn upload_file_should_fail_with_invalid_api_key() {
let client = build_client_with_key("invalid");
let request = SaveFileRequest {
record_id: 1,
field_id: 1,
notes: Some("test".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test.txt".to_string(),
file_data: b"test".to_vec(),
content_type: "text/plain".to_string(),
};
let result = client.upload_file(request).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn upload_file_should_fail_for_non_file_field() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_TEXT_FIELD");
let file_data = std::fs::read("tests/test_data/test-attachment.txt").unwrap();
let request = SaveFileRequest {
record_id,
field_id,
notes: Some("test".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test-attachment.txt".to_string(),
file_data,
content_type: "text/plain".to_string(),
};
let result = client.upload_file(request).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn delete_file_from_attachment_should_succeed() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let file_data = std::fs::read("tests/test_data/test-attachment.txt").unwrap();
let request = SaveFileRequest {
record_id,
field_id,
notes: Some("to be deleted".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test-attachment.txt".to_string(),
file_data,
content_type: "text/plain".to_string(),
};
let uploaded = client.upload_file(request).await.unwrap();
client
.delete_file(record_id, field_id, uploaded.id)
.await
.unwrap();
}
#[tokio::test]
#[ignore]
async fn delete_file_from_image_should_succeed() {
let client = build_client();
let record_id = required_env_i32("TEST_RECORD");
let field_id = required_env_i32("TEST_IMAGE_FIELD");
let file_data = std::fs::read("tests/test_data/test-image.jpeg").unwrap();
let request = SaveFileRequest {
record_id,
field_id,
notes: Some("to be deleted".to_string()),
modified_date: Some(chrono::Utc::now()),
file_name: "test-image.jpeg".to_string(),
file_data,
content_type: "image/jpeg".to_string(),
};
let uploaded = client.upload_file(request).await.unwrap();
client
.delete_file(record_id, field_id, uploaded.id)
.await
.unwrap();
}
#[tokio::test]
#[ignore]
async fn delete_file_should_fail_with_invalid_api_key() {
let client = build_client_with_key("invalid");
let result = client.delete_file(1, 1, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn delete_file_should_fail_when_no_field_access() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD_NO_ACCESS_FIELD");
let result = client.delete_file(1, field_id, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn delete_file_should_fail_when_no_app_access() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD_NO_ACCESS_APP");
let result = client.delete_file(1, field_id, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn delete_file_should_fail_when_field_not_found() {
let client = build_client();
let result = client.delete_file(1, 0, 1).await;
assert!(result.is_err());
}
#[tokio::test]
#[ignore]
async fn delete_file_should_fail_when_record_not_found() {
let client = build_client();
let field_id = required_env_i32("TEST_ATTACHMENT_FIELD");
let result = client.delete_file(0, field_id, 1).await;
assert!(result.is_err());
}