| Crates.io | nylas-mock |
| lib.rs | nylas-mock |
| version | 0.1.1 |
| created_at | 2025-12-27 22:24:45.770182+00 |
| updated_at | 2025-12-28 07:09:01.452643+00 |
| description | Testing utilities for Nylas SDK |
| homepage | |
| repository | https://github.com/mqasimca/nylas-rust |
| max_upload_size | |
| id | 2007932 |
| size | 65,210 |
Testing utilities and mock data for the Nylas SDK.
This crate provides test fixtures, mock data, and utilities for testing applications that use the Nylas Rust SDK.
wiremock integration for HTTP mockingAdd this to your Cargo.toml dev-dependencies:
[dev-dependencies]
nylas-mock = "0.1"
wiremock = "0.5"
tokio = { version = "1.35", features = ["full"] }
use nylas_mock::mocks;
use wiremock::{MockServer, Mock, ResponseTemplate};
use wiremock::matchers::{method, path};
#[tokio::test]
async fn test_list_messages() {
// Start mock server
let mock_server = MockServer::start().await;
// Setup mock response
Mock::given(method("GET"))
.and(path("/v3/grants/grant_123/messages"))
.respond_with(ResponseTemplate::new(200)
.set_body_json(mocks::messages::list_response()))
.mount(&mock_server)
.await;
// Create client pointing to mock server
let client = nylas_sdk::NylasClientBuilder::new("test_key")
.base_url(&mock_server.uri())
.build()
.unwrap();
// Test your code
let grant_id = nylas_sdk::GrantId::new("grant_123");
let messages = client.messages().list(&grant_id, None).await.unwrap();
assert_eq!(messages.len(), 3);
}
use nylas_mock::mocks::messages;
// Pre-built mock responses
let list_response = messages::list_response();
let single_message = messages::message();
let sent_message = messages::sent_message();
use nylas_mock::mocks::events;
let list_response = events::list_response();
let event = events::event();
let created_event = events::created_event();
use nylas_mock::mocks::calendars;
let list_response = calendars::list_response();
let calendar = calendars::calendar();
let availability = calendars::availability_response();
use nylas_mock::mocks::contacts;
let list_response = contacts::list_response();
let contact = contacts::contact();
You can customize mock responses for specific test scenarios:
use serde_json::json;
use wiremock::{Mock, ResponseTemplate};
Mock::given(method("POST"))
.and(path("/v3/grants/grant_123/messages/send"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"id": "custom_message_id",
"grant_id": "grant_123",
"subject": "Custom Subject",
"from": [{
"email": "sender@example.com",
"name": "Sender"
}],
"to": [{
"email": "recipient@example.com",
"name": "Recipient"
}],
"date": 1234567890
})))
.mount(&mock_server)
.await;
Test error handling with mock error responses:
use wiremock::{Mock, ResponseTemplate};
// Rate limit error
Mock::given(method("GET"))
.and(path("/v3/grants/grant_123/messages"))
.respond_with(ResponseTemplate::new(429)
.insert_header("Retry-After", "60")
.set_body_json(json!({
"type": "rate_limit_error",
"message": "Rate limit exceeded"
})))
.mount(&mock_server)
.await;
// Authentication error
Mock::given(method("GET"))
.and(path("/v3/grants/grant_123/messages"))
.respond_with(ResponseTemplate::new(401)
.set_body_json(json!({
"type": "authentication_error",
"message": "Invalid API key"
})))
.mount(&mock_server)
.await;
Mock paginated responses:
use nylas_mock::mocks::pagination;
// First page with next token
Mock::given(method("GET"))
.and(path("/v3/grants/grant_123/messages"))
.respond_with(ResponseTemplate::new(200)
.set_body_json(pagination::page_with_next_token(
messages::message(),
"next_page_token_123"
)))
.mount(&mock_server)
.await;
// Second page (final)
Mock::given(method("GET"))
.and(path("/v3/grants/grant_123/messages"))
.and(query_param("page_token", "next_page_token_123"))
.respond_with(ResponseTemplate::new(200)
.set_body_json(pagination::final_page(messages::message())))
.mount(&mock_server)
.await;
use nylas_mock::helpers;
// Create test client with mock server
let (client, mock_server) = helpers::create_test_client().await;
// Setup standard mocks
helpers::setup_auth_mocks(&mock_server).await;
helpers::setup_message_mocks(&mock_server).await;
// Common test data
let grant_id = helpers::test_grant_id();
let message_id = helpers::test_message_id();
MIT