style: use 2-space indentation across entire codebase
Add rustfmt.toml with tab_spaces = 2 and reformat all source files, tests, and README code examples to use 2-space indentation.
This commit is contained in:
+5
-5
@@ -2,9 +2,9 @@ use onspring::OnspringClient;
|
||||
use wiremock::MockServer;
|
||||
|
||||
pub async fn setup() -> (MockServer, OnspringClient) {
|
||||
let mock_server = MockServer::start().await;
|
||||
let client = OnspringClient::builder("test-api-key")
|
||||
.base_url(mock_server.uri())
|
||||
.build();
|
||||
(mock_server, client)
|
||||
let mock_server = MockServer::start().await;
|
||||
let client = OnspringClient::builder("test-api-key")
|
||||
.base_url(mock_server.uri())
|
||||
.build();
|
||||
(mock_server, client)
|
||||
}
|
||||
|
||||
+86
-86
@@ -5,116 +5,116 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_apps_success() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps"))
|
||||
.and(header("x-apikey", "test-api-key"))
|
||||
.and(header("x-api-version", "2"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 2,
|
||||
"items": [
|
||||
{"href": "/Apps/id/1", "id": 1, "name": "App One"},
|
||||
{"href": "/Apps/id/2", "id": 2, "name": "App Two"}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps"))
|
||||
.and(header("x-apikey", "test-api-key"))
|
||||
.and(header("x-api-version", "2"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 2,
|
||||
"items": [
|
||||
{"href": "/Apps/id/1", "id": 1, "name": "App One"},
|
||||
{"href": "/Apps/id/2", "id": 2, "name": "App Two"}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.list_apps(None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(2));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items.len(), 2);
|
||||
assert_eq!(items[0].id, 1);
|
||||
assert_eq!(items[0].name.as_deref(), Some("App One"));
|
||||
let result = client.list_apps(None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(2));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items.len(), 2);
|
||||
assert_eq!(items[0].id, 1);
|
||||
assert_eq!(items[0].name.as_deref(), Some("App One"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_apps_with_paging() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps"))
|
||||
.and(query_param("PageNumber", "2"))
|
||||
.and(query_param("PageSize", "10"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 2,
|
||||
"pageSize": 10,
|
||||
"totalPages": 3,
|
||||
"totalRecords": 25,
|
||||
"items": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps"))
|
||||
.and(query_param("PageNumber", "2"))
|
||||
.and(query_param("PageSize", "10"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 2,
|
||||
"pageSize": 10,
|
||||
"totalPages": 3,
|
||||
"totalRecords": 25,
|
||||
"items": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 2,
|
||||
page_size: 10,
|
||||
};
|
||||
let result = client.list_apps(Some(paging)).await.unwrap();
|
||||
assert_eq!(result.page_number, Some(2));
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 2,
|
||||
page_size: 10,
|
||||
};
|
||||
let result = client.list_apps(Some(paging)).await.unwrap();
|
||||
assert_eq!(result.page_number, Some(2));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_app_success() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps/id/42"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"href": "/Apps/id/42",
|
||||
"id": 42,
|
||||
"name": "Test App"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps/id/42"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"href": "/Apps/id/42",
|
||||
"id": 42,
|
||||
"name": "Test App"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let app = client.get_app(42).await.unwrap();
|
||||
assert_eq!(app.id, 42);
|
||||
assert_eq!(app.name.as_deref(), Some("Test App"));
|
||||
let app = client.get_app(42).await.unwrap();
|
||||
assert_eq!(app.id, 42);
|
||||
assert_eq!(app.name.as_deref(), Some("Test App"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_app_not_found() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Apps/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.get_app(999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
let result = client.get_app(999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_batch_get_apps() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Apps/batch-get"))
|
||||
.and(body_json(serde_json::json!([1, 2, 3])))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"count": 3,
|
||||
"items": [
|
||||
{"href": "/Apps/id/1", "id": 1, "name": "App 1"},
|
||||
{"href": "/Apps/id/2", "id": 2, "name": "App 2"},
|
||||
{"href": "/Apps/id/3", "id": 3, "name": "App 3"}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Apps/batch-get"))
|
||||
.and(body_json(serde_json::json!([1, 2, 3])))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"count": 3,
|
||||
"items": [
|
||||
{"href": "/Apps/id/1", "id": 1, "name": "App 1"},
|
||||
{"href": "/Apps/id/2", "id": 2, "name": "App 2"},
|
||||
{"href": "/Apps/id/3", "id": 3, "name": "App 3"}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.batch_get_apps(&[1, 2, 3]).await.unwrap();
|
||||
assert_eq!(result.count, Some(3));
|
||||
assert_eq!(result.items.unwrap().len(), 3);
|
||||
let result = client.batch_get_apps(&[1, 2, 3]).await.unwrap();
|
||||
assert_eq!(result.count, Some(3));
|
||||
assert_eq!(result.items.unwrap().len(), 3);
|
||||
}
|
||||
|
||||
+81
-81
@@ -5,75 +5,75 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_field_success() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/100"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"id": 100,
|
||||
"appId": 1,
|
||||
"name": "Text Field",
|
||||
"type": "Text",
|
||||
"status": "Enabled",
|
||||
"isRequired": true,
|
||||
"isUnique": false
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/100"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"id": 100,
|
||||
"appId": 1,
|
||||
"name": "Text Field",
|
||||
"type": "Text",
|
||||
"status": "Enabled",
|
||||
"isRequired": true,
|
||||
"isUnique": false
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let field = client.get_field(100).await.unwrap();
|
||||
assert_eq!(field.id, 100);
|
||||
assert_eq!(field.app_id, 1);
|
||||
assert_eq!(field.name.as_deref(), Some("Text Field"));
|
||||
assert!(field.is_required);
|
||||
assert!(!field.is_unique);
|
||||
let field = client.get_field(100).await.unwrap();
|
||||
assert_eq!(field.id, 100);
|
||||
assert_eq!(field.app_id, 1);
|
||||
assert_eq!(field.name.as_deref(), Some("Text Field"));
|
||||
assert!(field.is_required);
|
||||
assert!(!field.is_unique);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_field_list_type() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/200"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"id": 200,
|
||||
"appId": 1,
|
||||
"name": "Status",
|
||||
"type": "List",
|
||||
"status": "Enabled",
|
||||
"isRequired": false,
|
||||
"isUnique": false,
|
||||
"multiplicity": "SingleSelect",
|
||||
"listId": 50,
|
||||
"values": [
|
||||
{
|
||||
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"name": "Active",
|
||||
"sortOrder": 1,
|
||||
"numericValue": 1.0,
|
||||
"color": "#00ff00"
|
||||
}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/200"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"id": 200,
|
||||
"appId": 1,
|
||||
"name": "Status",
|
||||
"type": "List",
|
||||
"status": "Enabled",
|
||||
"isRequired": false,
|
||||
"isUnique": false,
|
||||
"multiplicity": "SingleSelect",
|
||||
"listId": 50,
|
||||
"values": [
|
||||
{
|
||||
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"name": "Active",
|
||||
"sortOrder": 1,
|
||||
"numericValue": 1.0,
|
||||
"color": "#00ff00"
|
||||
}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let field = client.get_field(200).await.unwrap();
|
||||
assert_eq!(
|
||||
field.multiplicity,
|
||||
Some(onspring::Multiplicity::SingleSelect)
|
||||
);
|
||||
assert_eq!(field.list_id, Some(50));
|
||||
let values = field.values.unwrap();
|
||||
assert_eq!(values.len(), 1);
|
||||
assert_eq!(values[0].name, "Active");
|
||||
let field = client.get_field(200).await.unwrap();
|
||||
assert_eq!(
|
||||
field.multiplicity,
|
||||
Some(onspring::Multiplicity::SingleSelect)
|
||||
);
|
||||
assert_eq!(field.list_id, Some(50));
|
||||
let values = field.values.unwrap();
|
||||
assert_eq!(values.len(), 1);
|
||||
assert_eq!(values[0].name, "Active");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_batch_get_fields() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Fields/batch-get"))
|
||||
.and(body_json(serde_json::json!([1, 2])))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
@@ -86,16 +86,16 @@ async fn test_batch_get_fields() {
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.batch_get_fields(&[1, 2]).await.unwrap();
|
||||
assert_eq!(result.count, Some(2));
|
||||
assert_eq!(result.items.unwrap().len(), 2);
|
||||
let result = client.batch_get_fields(&[1, 2]).await.unwrap();
|
||||
assert_eq!(result.count, Some(2));
|
||||
assert_eq!(result.items.unwrap().len(), 2);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_fields_for_app() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/appId/5"))
|
||||
.and(query_param("PageNumber", "1"))
|
||||
.and(query_param("PageSize", "25"))
|
||||
@@ -113,30 +113,30 @@ async fn test_list_fields_for_app() {
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 1,
|
||||
page_size: 25,
|
||||
};
|
||||
let result = client.list_fields(5, Some(paging)).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(3));
|
||||
assert_eq!(result.items.unwrap().len(), 3);
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 1,
|
||||
page_size: 25,
|
||||
};
|
||||
let result = client.list_fields(5, Some(paging)).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(3));
|
||||
assert_eq!(result.items.unwrap().len(), 3);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_field_not_found() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Fields/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.get_field(999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
let result = client.get_field(999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
+82
-82
@@ -5,112 +5,112 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_file_info() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"type": "Attachment",
|
||||
"contentType": "application/pdf",
|
||||
"name": "document.pdf",
|
||||
"createdDate": "2024-01-15T10:30:00Z",
|
||||
"modifiedDate": "2024-01-15T10:30:00Z",
|
||||
"owner": "admin",
|
||||
"notes": "Important doc",
|
||||
"fileHref": "/Files/recordId/1/fieldId/2/fileId/3/file"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"type": "Attachment",
|
||||
"contentType": "application/pdf",
|
||||
"name": "document.pdf",
|
||||
"createdDate": "2024-01-15T10:30:00Z",
|
||||
"modifiedDate": "2024-01-15T10:30:00Z",
|
||||
"owner": "admin",
|
||||
"notes": "Important doc",
|
||||
"fileHref": "/Files/recordId/1/fieldId/2/fileId/3/file"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let info = client.get_file_info(1, 2, 3).await.unwrap();
|
||||
assert_eq!(info.name.as_deref(), Some("document.pdf"));
|
||||
assert_eq!(info.content_type.as_deref(), Some("application/pdf"));
|
||||
assert_eq!(info.owner.as_deref(), Some("admin"));
|
||||
let info = client.get_file_info(1, 2, 3).await.unwrap();
|
||||
assert_eq!(info.name.as_deref(), Some("document.pdf"));
|
||||
assert_eq!(info.content_type.as_deref(), Some("application/pdf"));
|
||||
assert_eq!(info.owner.as_deref(), Some("admin"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_file_content() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
let file_bytes = b"hello file content";
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3/file"))
|
||||
.respond_with(
|
||||
ResponseTemplate::new(200)
|
||||
.set_body_bytes(file_bytes.to_vec())
|
||||
.insert_header("content-type", "application/pdf")
|
||||
.insert_header("content-disposition", "attachment; filename=\"test.pdf\""),
|
||||
)
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
let file_bytes = b"hello file content";
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3/file"))
|
||||
.respond_with(
|
||||
ResponseTemplate::new(200)
|
||||
.set_body_bytes(file_bytes.to_vec())
|
||||
.insert_header("content-type", "application/pdf")
|
||||
.insert_header("content-disposition", "attachment; filename=\"test.pdf\""),
|
||||
)
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let response = client.get_file(1, 2, 3).await.unwrap();
|
||||
assert_eq!(response.data.as_ref(), file_bytes);
|
||||
assert_eq!(response.content_type.as_deref(), Some("application/pdf"));
|
||||
assert_eq!(response.file_name.as_deref(), Some("test.pdf"));
|
||||
let response = client.get_file(1, 2, 3).await.unwrap();
|
||||
assert_eq!(response.data.as_ref(), file_bytes);
|
||||
assert_eq!(response.content_type.as_deref(), Some("application/pdf"));
|
||||
assert_eq!(response.file_name.as_deref(), Some("test.pdf"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_upload_file() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Files"))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(serde_json::json!({
|
||||
"id": 42
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Files"))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(serde_json::json!({
|
||||
"id": 42
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let request = onspring::models::file::SaveFileRequest {
|
||||
record_id: 1,
|
||||
field_id: 2,
|
||||
notes: Some("test notes".to_string()),
|
||||
modified_date: None,
|
||||
file_name: "test.txt".to_string(),
|
||||
file_data: b"file content".to_vec(),
|
||||
content_type: "text/plain".to_string(),
|
||||
};
|
||||
let result = client.upload_file(request).await.unwrap();
|
||||
assert_eq!(result.id, 42);
|
||||
let request = onspring::models::file::SaveFileRequest {
|
||||
record_id: 1,
|
||||
field_id: 2,
|
||||
notes: Some("test notes".to_string()),
|
||||
modified_date: None,
|
||||
file_name: "test.txt".to_string(),
|
||||
file_data: b"file content".to_vec(),
|
||||
content_type: "text/plain".to_string(),
|
||||
};
|
||||
let result = client.upload_file(request).await.unwrap();
|
||||
assert_eq!(result.id, 42);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_delete_file() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("DELETE"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("DELETE"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/3"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.delete_file(1, 2, 3).await;
|
||||
assert!(result.is_ok());
|
||||
let result = client.delete_file(1, 2, 3).await;
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_file_info_not_found() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/999"))
|
||||
.respond_with(ResponseTemplate::new(404).set_body_json(serde_json::json!({
|
||||
"message": "File not found"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Files/recordId/1/fieldId/2/fileId/999"))
|
||||
.respond_with(ResponseTemplate::new(404).set_body_json(serde_json::json!({
|
||||
"message": "File not found"
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.get_file_info(1, 2, 999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api {
|
||||
status_code,
|
||||
message,
|
||||
}) = result
|
||||
{
|
||||
assert_eq!(status_code, 404);
|
||||
assert_eq!(message, "File not found");
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
let result = client.get_file_info(1, 2, 999).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api {
|
||||
status_code,
|
||||
message,
|
||||
}) = result
|
||||
{
|
||||
assert_eq!(status_code, 404);
|
||||
assert_eq!(message, "File not found");
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
+57
-57
@@ -6,81 +6,81 @@ 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();
|
||||
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;
|
||||
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);
|
||||
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();
|
||||
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;
|
||||
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);
|
||||
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();
|
||||
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;
|
||||
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());
|
||||
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();
|
||||
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;
|
||||
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");
|
||||
}
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
+23
-23
@@ -5,36 +5,36 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_ping_success() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Ping"))
|
||||
.and(header("x-apikey", "test-api-key"))
|
||||
.and(header("x-api-version", "2"))
|
||||
.respond_with(ResponseTemplate::new(200))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Ping"))
|
||||
.and(header("x-apikey", "test-api-key"))
|
||||
.and(header("x-api-version", "2"))
|
||||
.respond_with(ResponseTemplate::new(200))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.ping().await;
|
||||
assert!(result.is_ok());
|
||||
let result = client.ping().await;
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_ping_unauthorized() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Ping"))
|
||||
.respond_with(ResponseTemplate::new(401))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Ping"))
|
||||
.respond_with(ResponseTemplate::new(401))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.ping().await;
|
||||
assert!(result.is_err());
|
||||
let result = client.ping().await;
|
||||
assert!(result.is_err());
|
||||
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 401);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 401);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
+165
-165
@@ -7,220 +7,220 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_records() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 1,
|
||||
"items": [
|
||||
{
|
||||
"appId": 1,
|
||||
"recordId": 100,
|
||||
"fieldData": [
|
||||
{"type": "String", "fieldId": 10, "value": "hello"}
|
||||
]
|
||||
}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 1,
|
||||
"items": [
|
||||
{
|
||||
"appId": 1,
|
||||
"recordId": 100,
|
||||
"fieldData": [
|
||||
{"type": "String", "fieldId": 10, "value": "hello"}
|
||||
]
|
||||
}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.list_records(1, None, None, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(1));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items[0].record_id, 100);
|
||||
let field_data = items[0].field_data.as_ref().unwrap();
|
||||
assert_eq!(field_data[0].field_id, 10);
|
||||
assert_eq!(field_data[0].value, serde_json::json!("hello"));
|
||||
let result = client.list_records(1, None, None, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(1));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items[0].record_id, 100);
|
||||
let field_data = items[0].field_data.as_ref().unwrap();
|
||||
assert_eq!(field_data[0].field_id, 10);
|
||||
assert_eq!(field_data[0].value, serde_json::json!("hello"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_records_with_params() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1"))
|
||||
.and(query_param("fieldIds", "10,20"))
|
||||
.and(query_param("dataFormat", "Formatted"))
|
||||
.and(query_param("PageNumber", "2"))
|
||||
.and(query_param("PageSize", "10"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 2,
|
||||
"pageSize": 10,
|
||||
"totalPages": 5,
|
||||
"totalRecords": 50,
|
||||
"items": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1"))
|
||||
.and(query_param("fieldIds", "10,20"))
|
||||
.and(query_param("dataFormat", "Formatted"))
|
||||
.and(query_param("PageNumber", "2"))
|
||||
.and(query_param("PageSize", "10"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 2,
|
||||
"pageSize": 10,
|
||||
"totalPages": 5,
|
||||
"totalRecords": 50,
|
||||
"items": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 2,
|
||||
page_size: 10,
|
||||
};
|
||||
let result = client
|
||||
.list_records(
|
||||
1,
|
||||
Some(paging),
|
||||
Some(&[10, 20]),
|
||||
Some(onspring::DataFormat::Formatted),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(result.page_number, Some(2));
|
||||
let paging = onspring::PagingRequest {
|
||||
page_number: 2,
|
||||
page_size: 10,
|
||||
};
|
||||
let result = client
|
||||
.list_records(
|
||||
1,
|
||||
Some(paging),
|
||||
Some(&[10, 20]),
|
||||
Some(onspring::DataFormat::Formatted),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(result.page_number, Some(2));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_record() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1/recordId/42"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"appId": 1,
|
||||
"recordId": 42,
|
||||
"fieldData": [
|
||||
{"type": "Integer", "fieldId": 5, "value": 123}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1/recordId/42"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"appId": 1,
|
||||
"recordId": 42,
|
||||
"fieldData": [
|
||||
{"type": "Integer", "fieldId": 5, "value": 123}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let record = client.get_record(1, 42, None, None).await.unwrap();
|
||||
assert_eq!(record.record_id, 42);
|
||||
assert_eq!(record.app_id, 1);
|
||||
let record = client.get_record(1, 42, None, None).await.unwrap();
|
||||
assert_eq!(record.record_id, 42);
|
||||
assert_eq!(record.app_id, 1);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_save_record_create() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("PUT"))
|
||||
.and(path("/Records"))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(serde_json::json!({
|
||||
"id": 99,
|
||||
"warnings": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("PUT"))
|
||||
.and(path("/Records"))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(serde_json::json!({
|
||||
"id": 99,
|
||||
"warnings": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let mut fields = HashMap::new();
|
||||
fields.insert("10".to_string(), serde_json::json!("test value"));
|
||||
let mut fields = HashMap::new();
|
||||
fields.insert("10".to_string(), serde_json::json!("test value"));
|
||||
|
||||
let request = onspring::models::record::SaveRecordRequest {
|
||||
app_id: 1,
|
||||
record_id: None,
|
||||
fields,
|
||||
};
|
||||
let result = client.save_record(request).await.unwrap();
|
||||
assert_eq!(result.id, 99);
|
||||
let request = onspring::models::record::SaveRecordRequest {
|
||||
app_id: 1,
|
||||
record_id: None,
|
||||
fields,
|
||||
};
|
||||
let result = client.save_record(request).await.unwrap();
|
||||
assert_eq!(result.id, 99);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_delete_record() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("DELETE"))
|
||||
.and(path("/Records/appId/1/recordId/42"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("DELETE"))
|
||||
.and(path("/Records/appId/1/recordId/42"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.delete_record(1, 42).await;
|
||||
assert!(result.is_ok());
|
||||
let result = client.delete_record(1, 42).await;
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_batch_get_records() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/batch-get"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"count": 2,
|
||||
"items": [
|
||||
{"appId": 1, "recordId": 1, "fieldData": []},
|
||||
{"appId": 1, "recordId": 2, "fieldData": []}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/batch-get"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"count": 2,
|
||||
"items": [
|
||||
{"appId": 1, "recordId": 1, "fieldData": []},
|
||||
{"appId": 1, "recordId": 2, "fieldData": []}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let request = onspring::models::record::BatchGetRecordsRequest {
|
||||
app_id: 1,
|
||||
record_ids: vec![1, 2],
|
||||
field_ids: None,
|
||||
data_format: None,
|
||||
};
|
||||
let result = client.batch_get_records(request).await.unwrap();
|
||||
assert_eq!(result.count, Some(2));
|
||||
let request = onspring::models::record::BatchGetRecordsRequest {
|
||||
app_id: 1,
|
||||
record_ids: vec![1, 2],
|
||||
field_ids: None,
|
||||
data_format: None,
|
||||
};
|
||||
let result = client.batch_get_records(request).await.unwrap();
|
||||
assert_eq!(result.count, Some(2));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_query_records() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/Query"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 1,
|
||||
"items": [
|
||||
{"appId": 1, "recordId": 5, "fieldData": []}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/Query"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 1,
|
||||
"items": [
|
||||
{"appId": 1, "recordId": 5, "fieldData": []}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let request = onspring::models::record::QueryRecordsRequest {
|
||||
app_id: 1,
|
||||
filter: "fieldId eq 'test'".to_string(),
|
||||
field_ids: None,
|
||||
data_format: None,
|
||||
};
|
||||
let result = client.query_records(request, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(1));
|
||||
let request = onspring::models::record::QueryRecordsRequest {
|
||||
app_id: 1,
|
||||
filter: "fieldId eq 'test'".to_string(),
|
||||
field_ids: None,
|
||||
data_format: None,
|
||||
};
|
||||
let result = client.query_records(request, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(1));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_batch_delete_records() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/batch-delete"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/Records/batch-delete"))
|
||||
.respond_with(ResponseTemplate::new(204))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let request = onspring::models::record::BatchDeleteRecordsRequest {
|
||||
app_id: 1,
|
||||
record_ids: vec![1, 2, 3],
|
||||
};
|
||||
let result = client.batch_delete_records(request).await;
|
||||
assert!(result.is_ok());
|
||||
let request = onspring::models::record::BatchDeleteRecordsRequest {
|
||||
app_id: 1,
|
||||
record_ids: vec![1, 2, 3],
|
||||
};
|
||||
let result = client.batch_delete_records(request).await;
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_record_not_found() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1/recordId/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Records/appId/1/recordId/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.get_record(1, 999, None, None).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
let result = client.get_record(1, 999, None, None).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
+73
-73
@@ -5,97 +5,97 @@ use wiremock::{Mock, ResponseTemplate};
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_report() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/1"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"columns": ["Record Id", "Name", "Status"],
|
||||
"rows": [
|
||||
{"recordId": 100, "cells": [100, "Test", "Active"]},
|
||||
{"recordId": 101, "cells": [101, "Other", "Inactive"]}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/1"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"columns": ["Record Id", "Name", "Status"],
|
||||
"rows": [
|
||||
{"recordId": 100, "cells": [100, "Test", "Active"]},
|
||||
{"recordId": 101, "cells": [101, "Other", "Inactive"]}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let report = client.get_report(1, None, None).await.unwrap();
|
||||
let columns = report.columns.unwrap();
|
||||
assert_eq!(columns.len(), 3);
|
||||
assert_eq!(columns[0], "Record Id");
|
||||
let rows = report.rows.unwrap();
|
||||
assert_eq!(rows.len(), 2);
|
||||
assert_eq!(rows[0].record_id, Some(100));
|
||||
let report = client.get_report(1, None, None).await.unwrap();
|
||||
let columns = report.columns.unwrap();
|
||||
assert_eq!(columns.len(), 3);
|
||||
assert_eq!(columns[0], "Record Id");
|
||||
let rows = report.rows.unwrap();
|
||||
assert_eq!(rows.len(), 2);
|
||||
assert_eq!(rows[0].record_id, Some(100));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_report_with_format() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/1"))
|
||||
.and(query_param("apiDataFormat", "Formatted"))
|
||||
.and(query_param("dataType", "ChartData"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"columns": ["Name"],
|
||||
"rows": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/1"))
|
||||
.and(query_param("apiDataFormat", "Formatted"))
|
||||
.and(query_param("dataType", "ChartData"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"columns": ["Name"],
|
||||
"rows": []
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client
|
||||
.get_report(
|
||||
1,
|
||||
Some(onspring::DataFormat::Formatted),
|
||||
Some(onspring::ReportDataType::ChartData),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(result.columns.unwrap().len() == 1);
|
||||
let result = client
|
||||
.get_report(
|
||||
1,
|
||||
Some(onspring::DataFormat::Formatted),
|
||||
Some(onspring::ReportDataType::ChartData),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(result.columns.unwrap().len() == 1);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_list_reports() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/appId/5"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 2,
|
||||
"items": [
|
||||
{"appId": 5, "id": 10, "name": "Report A", "description": "First report"},
|
||||
{"appId": 5, "id": 11, "name": "Report B", "description": null}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/appId/5"))
|
||||
.respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({
|
||||
"pageNumber": 1,
|
||||
"pageSize": 50,
|
||||
"totalPages": 1,
|
||||
"totalRecords": 2,
|
||||
"items": [
|
||||
{"appId": 5, "id": 10, "name": "Report A", "description": "First report"},
|
||||
{"appId": 5, "id": 11, "name": "Report B", "description": null}
|
||||
]
|
||||
})))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.list_reports(5, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(2));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items[0].id, 10);
|
||||
assert_eq!(items[0].name.as_deref(), Some("Report A"));
|
||||
assert_eq!(items[1].description, None);
|
||||
let result = client.list_reports(5, None).await.unwrap();
|
||||
assert_eq!(result.total_records, Some(2));
|
||||
let items = result.items.unwrap();
|
||||
assert_eq!(items[0].id, 10);
|
||||
assert_eq!(items[0].name.as_deref(), Some("Report A"));
|
||||
assert_eq!(items[1].description, None);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_report_not_found() {
|
||||
let (mock_server, client) = common::setup().await;
|
||||
let (mock_server, client) = common::setup().await;
|
||||
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
Mock::given(method("GET"))
|
||||
.and(path("/Reports/id/999"))
|
||||
.respond_with(ResponseTemplate::new(404))
|
||||
.mount(&mock_server)
|
||||
.await;
|
||||
|
||||
let result = client.get_report(999, None, None).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
let result = client.get_report(999, None, None).await;
|
||||
assert!(result.is_err());
|
||||
if let Err(onspring::OnspringError::Api { status_code, .. }) = result {
|
||||
assert_eq!(status_code, 404);
|
||||
} else {
|
||||
panic!("Expected Api error");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user