use faucet_source_rest::{PaginationStyle, RestStream, RestStreamConfig};
use serde_json::json;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
fn unreachable_source() -> RestStream {
RestStream::new(
RestStreamConfig::new("http://127.0.0.1:1", "/items").pagination(PaginationStyle::None),
)
.expect("rest stream builds from a valid config")
}
#[test]
fn conformance_config_schema_valid() {
faucet_conformance::assert_config_schema_valid(&unreachable_source());
}
#[tokio::test]
async fn conformance_errors_not_panics() {
faucet_conformance::assert_errors_not_panics(&unreachable_source()).await;
}
#[tokio::test]
async fn conformance_batch_size_zero_single_page() {
let server = MockServer::start().await;
let data: Vec<_> = (0..50).map(|i| json!({ "id": i })).collect();
Mock::given(method("GET"))
.and(path("/items"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({ "data": data })))
.mount(&server)
.await;
let source = RestStream::new(
RestStreamConfig::new(&server.uri(), "/items")
.records_path("$.data[*]")
.pagination(PaginationStyle::None),
)
.unwrap();
faucet_conformance::assert_batch_size_zero_single_page(&source).await;
}
#[test]
fn conformance_connector_name_nonempty() {
faucet_conformance::assert_connector_name_nonempty(&unreachable_source());
}
#[tokio::test]
async fn conformance_preflight_check_wellformed() {
faucet_conformance::assert_preflight_check_wellformed(
&unreachable_source(),
&faucet_core::check::CheckContext::default(),
)
.await;
}