onspring-api-sdk-rust 0.0.1

Rust SDK for the Onspring API
Documentation
mod integration_common;

use integration_common::*;
use onspring::PagingRequest;

#[tokio::test]
#[ignore]
async fn get_field_should_return_field() {
  let client = build_client();
  let field_id = required_env_i32("TEST_FIELD_ID");
  let field = client.get_field(field_id).await.unwrap();

  assert_eq!(field.id, field_id);
  assert!(field.name.is_some());
  assert!(field.app_id > 0);
}

#[tokio::test]
#[ignore]
async fn get_field_should_fail_with_invalid_api_key() {
  let client = build_client_with_key("invalid");
  let result = client.get_field(1).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn get_field_should_fail_when_no_access() {
  let client = build_client();
  let field_id = required_env_i32("TEST_FIELD_ID_NO_ACCESS");
  let result = client.get_field(field_id).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn get_field_should_fail_when_not_found() {
  let client = build_client();
  let result = client.get_field(0).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn list_fields_should_return_fields() {
  let client = build_client();
  let app_id = required_env_i32("TEST_SURVEY_ID");
  let response = client.list_fields(app_id, None).await.unwrap();

  assert!(response.total_records.unwrap() > 0);
  let items = response.items.unwrap();
  assert!(!items.is_empty());

  for field in &items {
    assert!(field.id > 0);
    assert!(field.name.is_some());
    assert!(field.app_id > 0);
  }
}

#[tokio::test]
#[ignore]
async fn list_fields_should_respect_paging() {
  let client = build_client();
  let app_id = required_env_i32("TEST_SURVEY_ID");
  let paging = PagingRequest {
    page_number: 1,
    page_size: 1,
  };
  let response = client.list_fields(app_id, Some(paging)).await.unwrap();

  assert_eq!(response.page_number.unwrap(), 1);
  assert_eq!(response.page_size.unwrap(), 1);
  assert_eq!(response.items.unwrap().len(), 1);
}

#[tokio::test]
#[ignore]
async fn list_fields_should_fail_with_invalid_api_key() {
  let client = build_client_with_key("invalid");
  let result = client.list_fields(1, None).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn list_fields_should_fail_when_no_access() {
  let client = build_client();
  let app_id = required_env_i32("TEST_APP_ID_NO_ACCESS");
  let result = client.list_fields(app_id, None).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn batch_get_fields_should_return_fields() {
  let client = build_client();
  let field_ids = required_env_csv_i32("TEST_FIELD_IDS");
  let response = client.batch_get_fields(&field_ids).await.unwrap();

  let items = response.items.unwrap();
  assert_eq!(items.len(), field_ids.len());

  for field in &items {
    assert!(field.id > 0);
    assert!(field.name.is_some());
    assert!(field.app_id > 0);
  }
}

#[tokio::test]
#[ignore]
async fn batch_get_fields_should_fail_with_invalid_api_key() {
  let client = build_client_with_key("invalid");
  let result = client.batch_get_fields(&[1, 2, 3]).await;
  assert!(result.is_err());
}

#[tokio::test]
#[ignore]
async fn batch_get_fields_should_fail_when_no_access() {
  let client = build_client();
  let field_ids = required_env_csv_i32("TEST_FIELD_IDS_NO_ACCESS");
  let result = client.batch_get_fields(&field_ids).await;
  assert!(result.is_err());
}