everymap-providers-mapbox 0.2.1

MapBox provider for EveryMap — geocoding, routing, static maps, and more
Documentation
use everymap_core::auth::ApiKeyProvider;
use everymap_core::domains::tiling::{TileOptions, TileProvider};
use everymap_providers_mapbox::client::MapBoxClient;
use everymap_providers_mapbox::MapBoxTileProvider;
use std::sync::Arc;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};

#[tokio::test]
async fn test_tiling_contract() {
    let server = MockServer::start().await;

    // Simulate a MVT tile response
    let tile_data = vec![0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F];

    Mock::given(method("GET"))
        .and(path("/v4/mapbox.mapbox-streets-v8/10/523/335.mvt"))
        .respond_with(
            ResponseTemplate::new(200)
                .set_body_raw(tile_data.clone(), "application/vnd.mapbox-vector-tile"),
        )
        .mount(&server)
        .await;

    let auth = Arc::new(ApiKeyProvider::new(
        "pk.test123".to_string(),
        "access_token".to_string(),
    ));
    let client = Arc::new(MapBoxClient::new(auth));
    let tiling = MapBoxTileProvider::with_base_url(client, server.uri());

    let options = TileOptions {
        format: Some("mvt".to_string()),
        provider_extra: Some(serde_json::json!({
            "tileset_id": "mapbox.mapbox-streets-v8"
        })),
    };

    let response = tiling.get_tile(10, 523, 335, &options).await.unwrap();

    assert_eq!(response.data.len(), 6);
    assert_eq!(
        response.content_type,
        Some("application/vnd.mapbox-vector-tile".to_string())
    );
}