use everymap_core::auth::ApiKeyProvider;
use everymap_core::domains::imaging::{ImageOptions, MapImageProvider};
use everymap_core::types::Coordinate;
use everymap_providers_google::client::GoogleClient;
use everymap_providers_google::GoogleMapImageProvider;
use std::sync::Arc;
use wiremock::matchers::{method, query_param};
use wiremock::{Mock, MockServer, ResponseTemplate};
#[tokio::test]
async fn test_imaging_contract() {
let server = MockServer::start().await;
let png_bytes: &[u8] = &[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A];
Mock::given(method("GET"))
.respond_with(
ResponseTemplate::new(200)
.set_body_bytes(png_bytes)
.insert_header("content-type", "image/png"),
)
.mount(&server)
.await;
let auth = Arc::new(ApiKeyProvider::new(
"test-key".to_string(),
"key".to_string(),
));
let client = Arc::new(GoogleClient::new(auth));
let provider = GoogleMapImageProvider::with_base_url(client, server.uri());
let center = Coordinate::new(52.52, 13.405).unwrap();
let options = ImageOptions::default();
let response = provider
.get_image(¢er, 14, (800, 600), &options)
.await
.unwrap();
assert!(!response.data.is_empty());
assert_eq!(response.content_type, Some("image/png".to_string()));
}
#[tokio::test]
async fn test_imaging_with_format_and_language() {
let server = MockServer::start().await;
let jpg_bytes: &[u8] = &[0xFF, 0xD8, 0xFF, 0xE0];
Mock::given(method("GET"))
.respond_with(
ResponseTemplate::new(200)
.set_body_bytes(jpg_bytes)
.insert_header("content-type", "image/jpeg"),
)
.mount(&server)
.await;
let auth = Arc::new(ApiKeyProvider::new(
"test-key".to_string(),
"key".to_string(),
));
let client = Arc::new(GoogleClient::new(auth));
let provider = GoogleMapImageProvider::with_base_url(client, server.uri());
let center = Coordinate::new(40.7128, -74.006).unwrap();
let options = ImageOptions {
format: Some("jpg".to_string()),
language: Some("en".to_string()),
..Default::default()
};
let response = provider
.get_image(¢er, 10, (600, 400), &options)
.await
.unwrap();
assert!(!response.data.is_empty());
assert_eq!(response.content_type, Some("image/jpeg".to_string()));
}
#[tokio::test]
async fn test_imaging_width_height_override() {
let server = MockServer::start().await;
let png_bytes: &[u8] = &[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A];
Mock::given(method("GET"))
.and(query_param("size", "640x480"))
.respond_with(
ResponseTemplate::new(200)
.set_body_bytes(png_bytes)
.insert_header("content-type", "image/png"),
)
.mount(&server)
.await;
let auth = Arc::new(ApiKeyProvider::new(
"test-key".to_string(),
"key".to_string(),
));
let client = Arc::new(GoogleClient::new(auth));
let provider = GoogleMapImageProvider::with_base_url(client, server.uri());
let center = Coordinate::new(52.52, 13.405).unwrap();
let options = ImageOptions {
width: Some(640),
height: Some(480),
..Default::default()
};
let response = provider
.get_image(¢er, 14, (800, 600), &options)
.await
.unwrap();
assert!(!response.data.is_empty());
assert_eq!(response.content_type, Some("image/png".to_string()));
}