mod common;
use emailit::types::ListEventsParams;
use serde_json::json;
use wiremock::matchers::{method, path, query_param};
use wiremock::{Mock, ResponseTemplate};
#[tokio::test]
async fn test_list_events() {
let (client, server) = common::setup().await;
Mock::given(method("GET"))
.and(path("/v2/events"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"data": [
{"id": "evt_1", "object": "event", "type": "email.delivered"},
{"id": "evt_2", "object": "event", "type": "email.bounced"}
]
})))
.mount(&server)
.await;
let result = client.events.list(None).await.unwrap();
assert_eq!(result.data.len(), 2);
}
#[tokio::test]
async fn test_list_events_with_type_filter() {
let (client, server) = common::setup().await;
Mock::given(method("GET"))
.and(path("/v2/events"))
.and(query_param("type", "email.delivered"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"data": [
{"id": "evt_1", "object": "event", "type": "email.delivered"}
]
})))
.mount(&server)
.await;
let result = client
.events
.list(Some(ListEventsParams {
page: None,
limit: None,
event_type: Some("email.delivered".into()),
}))
.await
.unwrap();
assert_eq!(result.data.len(), 1);
assert_eq!(
result.data[0].event_type.as_deref(),
Some("email.delivered")
);
}
#[tokio::test]
async fn test_list_events_with_pagination() {
let (client, server) = common::setup().await;
Mock::given(method("GET"))
.and(path("/v2/events"))
.and(query_param("page", "2"))
.and(query_param("limit", "5"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"data": [],
"page": 2
})))
.mount(&server)
.await;
let result = client
.events
.list(Some(ListEventsParams {
page: Some(2),
limit: Some(5),
event_type: None,
}))
.await
.unwrap();
assert!(result.data.is_empty());
}
#[tokio::test]
async fn test_get_event() {
let (client, server) = common::setup().await;
Mock::given(method("GET"))
.and(path("/v2/events/evt_123"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"id": "evt_123",
"object": "event",
"type": "email.delivered",
"data": {"email_id": "em_456"},
"created_at": "2026-01-01T00:00:00Z"
})))
.mount(&server)
.await;
let result = client.events.get("evt_123").await.unwrap();
assert_eq!(result.id.unwrap(), "evt_123");
assert_eq!(result.event_type.unwrap(), "email.delivered");
assert!(result.data.is_some());
}