#![allow(dead_code)]
#![allow(unused_variables)]
#![allow(clippy::field_reassign_with_default)]
#[test]
fn test_google_ads_service_client_construction_with_interceptor() {
use tonic::service::Interceptor;
struct DummyInterceptor;
impl Interceptor for DummyInterceptor {
fn call(&mut self, req: tonic::Request<()>) -> Result<tonic::Request<()>, tonic::Status> {
Ok(req)
}
}
fn _check_construction_works<T: Interceptor>(_interceptor: T) {
}
let _interceptor = DummyInterceptor;
}
#[test]
fn test_google_ads_field_service_client_exists() {
use googleads_rs::google::ads::googleads::v23::services::google_ads_field_service_client::GoogleAdsFieldServiceClient;
let _type_check: Option<GoogleAdsFieldServiceClient<tonic::transport::Channel>> = None;
}
#[test]
fn test_client_method_signatures_exist() {
use googleads_rs::google::ads::googleads::v23::services::{
google_ads_field_service_client::GoogleAdsFieldServiceClient,
google_ads_service_client::GoogleAdsServiceClient, SearchGoogleAdsFieldsRequest,
SearchGoogleAdsStreamRequest,
};
fn _check_search_stream_exists(
_client: &GoogleAdsServiceClient<tonic::transport::Channel>,
_request: SearchGoogleAdsStreamRequest,
) {
}
fn _check_search_google_ads_fields_exists(
_client: &GoogleAdsFieldServiceClient<tonic::transport::Channel>,
_request: SearchGoogleAdsFieldsRequest,
) {
}
}
#[test]
fn test_search_google_ads_request_construction() {
use googleads_rs::google::ads::googleads::v23::services::SearchGoogleAdsRequest;
let request = SearchGoogleAdsRequest {
customer_id: "1234567890".to_string(),
query: "SELECT campaign.id, campaign.name FROM campaign".to_string(),
validate_only: false,
..Default::default()
};
assert_eq!(request.customer_id, "1234567890");
assert_eq!(
request.query,
"SELECT campaign.id, campaign.name FROM campaign"
);
}
#[test]
fn test_search_google_ads_fields_request_construction() {
use googleads_rs::google::ads::googleads::v23::services::SearchGoogleAdsFieldsRequest;
let request = SearchGoogleAdsFieldsRequest {
query: "SELECT name, data_type FROM google_ads_fields".to_string(),
page_token: "some-token".to_string(),
page_size: 100,
};
assert_eq!(
request.query,
"SELECT name, data_type FROM google_ads_fields"
);
assert_eq!(request.page_token, "some-token");
assert_eq!(request.page_size, 100);
}
#[test]
fn test_search_google_ads_fields_response_has_results() {
use googleads_rs::google::ads::googleads::v23::services::SearchGoogleAdsFieldsResponse;
let response = SearchGoogleAdsFieldsResponse {
..Default::default()
};
let _results = &response.results;
}
#[test]
fn test_search_google_ads_stream_response_fields_exist() {
use googleads_rs::google::ads::googleads::v23::services::{
GoogleAdsRow, SearchGoogleAdsStreamResponse,
};
let response = SearchGoogleAdsStreamResponse {
results: vec![GoogleAdsRow::default()],
field_mask: Some(prost_types::FieldMask { paths: vec![] }),
query_resource_consumption: 1000,
..Default::default()
};
assert_eq!(response.results.len(), 1);
assert_eq!(response.query_resource_consumption, 1000);
assert!(response.field_mask.is_some());
}
#[test]
fn test_customer_client_sub_accounts_query_fields() {
use googleads_rs::google::ads::googleads::v23::resources::CustomerClient;
use googleads_rs::google::ads::googleads::v23::services::GoogleAdsRow;
let mut customer_client = CustomerClient::default();
customer_client.id = Some(1234567890);
customer_client.level = Some(1);
customer_client.currency_code = Some("USD".to_string());
customer_client.time_zone = Some("America/New_York".to_string());
customer_client.descriptive_name = Some("Test Account".to_string());
let row = GoogleAdsRow {
customer_client: Some(customer_client),
..Default::default()
};
let id = row.get("customer_client.id");
let level = row.get("customer_client.level");
let currency_code = row.get("customer_client.currency_code");
let time_zone = row.get("customer_client.time_zone");
let descriptive_name = row.get("customer_client.descriptive_name");
assert_ne!(id, "not implemented by googleads-rs");
assert_ne!(level, "not implemented by googleads-rs");
assert_ne!(currency_code, "not implemented by googleads-rs");
assert_ne!(time_zone, "not implemented by googleads-rs");
assert_ne!(descriptive_name, "not implemented by googleads-rs");
assert_eq!(id, "1234567890");
assert_eq!(level, "1");
assert_eq!(currency_code, "USD");
assert_eq!(time_zone, "America/New_York");
assert_eq!(descriptive_name, "Test Account");
}
#[tokio::test]
async fn test_mcc_gaql_streaming_flow_simulation() {
use googleads_rs::google::ads::googleads::v23::resources::CustomerClient;
use googleads_rs::google::ads::googleads::v23::services::{
GoogleAdsRow, SearchGoogleAdsStreamResponse,
};
use prost_types::FieldMask;
let field_mask = FieldMask {
paths: vec![
"customer_client.id".to_string(),
"customer_client.level".to_string(),
"customer_client.currency_code".to_string(),
"customer_client.time_zone".to_string(),
"customer_client.descriptive_name".to_string(),
],
};
let mut results = Vec::new();
for i in 1..=3 {
let mut customer_client = CustomerClient::default();
customer_client.id = Some(1000000000 + i as i64);
customer_client.level = Some(i as i64);
customer_client.currency_code = Some("USD".to_string());
customer_client.time_zone = Some("America/Los_Angeles".to_string());
customer_client.descriptive_name = Some(format!("Account {}", i));
results.push(GoogleAdsRow {
customer_client: Some(customer_client),
..Default::default()
});
}
let response = SearchGoogleAdsStreamResponse {
results,
field_mask: Some(field_mask.clone()),
request_id: "test-request-123".to_string(),
query_resource_consumption: 500,
..Default::default()
};
let table: Vec<Vec<String>> = response
.results
.iter()
.map(|row| {
field_mask
.paths
.iter()
.map(|path| {
let value = row.get(path);
assert_ne!(
value, "not implemented by googleads-rs",
"Field '{}' returned not implemented error",
path
);
assert!(!value.is_empty(), "Field '{}' returned empty value", path);
value
})
.collect()
})
.collect();
assert_eq!(table.len(), 3);
assert_eq!(table[0].len(), 5);
assert_eq!(table[0][0], "1000000001"); assert_eq!(table[0][1], "1"); assert_eq!(table[0][2], "USD"); assert_eq!(table[0][3], "America/Los_Angeles"); assert_eq!(table[0][4], "Account 1");
assert_eq!(table[1][0], "1000000002");
assert_eq!(table[1][1], "2");
}
#[tokio::test]
async fn test_streaming_response_with_field_mask_integration() {
use googleads_rs::google::ads::googleads::v23::common::Metrics;
use googleads_rs::google::ads::googleads::v23::enums::campaign_status_enum::CampaignStatus;
use googleads_rs::google::ads::googleads::v23::resources::Campaign;
use googleads_rs::google::ads::googleads::v23::services::{
GoogleAdsRow, SearchGoogleAdsStreamResponse,
};
use prost_types::FieldMask;
let field_mask = FieldMask {
paths: vec![
"campaign.id".to_string(),
"campaign.name".to_string(),
"campaign.status".to_string(),
"metrics.impressions".to_string(),
"metrics.clicks".to_string(),
],
};
let mut campaign = Campaign::default();
campaign.id = Some(555555);
campaign.name = Some("Test Campaign".to_string());
campaign.status = CampaignStatus::Enabled as i32;
let mut metrics = Metrics::default();
metrics.impressions = Some(100000);
metrics.clicks = Some(5000);
let row = GoogleAdsRow {
campaign: Some(campaign),
metrics: Some(metrics),
..Default::default()
};
let response = SearchGoogleAdsStreamResponse {
results: vec![row],
field_mask: Some(field_mask.clone()),
request_id: "response-id".to_string(),
query_resource_consumption: 100,
..Default::default()
};
let field_mask = response.field_mask.as_ref().unwrap();
let row = &response.results[0];
for path in &field_mask.paths {
let value = row.get(path);
assert_ne!(
value, "not implemented by googleads-rs",
"Field '{}' is not implemented",
path
);
assert!(!value.is_empty(), "Field '{}' returned empty value", path);
}
assert_eq!(row.get("campaign.id"), "555555");
assert_eq!(row.get("campaign.name"), "Test Campaign");
assert_eq!(row.get("campaign.status"), "ENABLED");
assert_eq!(row.get("metrics.impressions"), "100000");
assert_eq!(row.get("metrics.clicks"), "5000");
}