Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 105 additions & 67 deletions gma/integration_test/src/integration_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ static const std::vector<std::string> kNeighboringContentURLs = {
"test_url1", "test_url2", "test_url3"};

using app_framework::LogDebug;
using app_framework::LogWarning;
using app_framework::ProcessEvents;

using firebase_test_framework::FirebaseTest;
Expand Down Expand Up @@ -902,36 +903,46 @@ TEST_F(FirebaseGmaTest, TestNativeAdLoad) {
firebase::Future<firebase::gma::AdResult> load_ad_future =
native_ad->LoadAd(kNativeAdUnit, GetAdRequest());

WaitForCompletion(load_ad_future, "LoadAd");
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
EXPECT_FALSE(
result_ptr->response_info().mediation_adapter_class_name().empty());
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
// Don't fail loadAd, if NoFill occurred.
WaitForCompletionAnyResult(load_ad_future, "LoadAd (ignoring NoFill error)");
EXPECT_TRUE(load_ad_future.error() == firebase::gma::kAdErrorCodeNone ||
load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill);

if (load_ad_future.error() == firebase::gma::kAdErrorCodeNone) {
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
EXPECT_FALSE(
result_ptr->response_info().mediation_adapter_class_name().empty());
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
EXPECT_FALSE(result_ptr->response_info().ToString().empty());

// Check image assets.
EXPECT_FALSE(native_ad->icon().image_uri().empty());
EXPECT_GT(native_ad->icon().scale(), 0);
EXPECT_FALSE(native_ad->images().empty());

// Native ads usually contain only one large image asset.
// Check the validity of the first asset from the vector.
EXPECT_FALSE(native_ad->images().at(0).image_uri().empty());
EXPECT_GT(native_ad->images().at(0).scale(), 0);

// When the NativeAd is loaded, try loading icon image asset.
firebase::Future<firebase::gma::ImageResult> load_image_future =
native_ad->icon().LoadImage();
WaitForCompletion(load_image_future, "LoadImage");
const firebase::gma::ImageResult* img_result_ptr =
load_image_future.result();
ASSERT_NE(img_result_ptr, nullptr);
EXPECT_TRUE(img_result_ptr->is_successful());
EXPECT_GT(img_result_ptr->image().size(), 0);

load_image_future.Release();
} else if (load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill) {
LogWarning("LoadAd returned NoFill in TestNativeAdLoad");
}

// Check image assets.
EXPECT_FALSE(native_ad->icon().image_uri().empty());
EXPECT_GT(native_ad->icon().scale(), 0);
EXPECT_FALSE(native_ad->images().empty());

// Native ads usually contain only one large image asset.
// Check the validity of the first asset from the vector.
EXPECT_FALSE(native_ad->images().at(0).image_uri().empty());
EXPECT_GT(native_ad->images().at(0).scale(), 0);

// When the NativeAd is loaded, try loading icon image asset.
firebase::Future<firebase::gma::ImageResult> load_image_future =
native_ad->icon().LoadImage();
WaitForCompletion(load_image_future, "LoadImage");
const firebase::gma::ImageResult* img_result_ptr = load_image_future.result();
ASSERT_NE(img_result_ptr, nullptr);
EXPECT_TRUE(img_result_ptr->is_successful());
EXPECT_GT(img_result_ptr->image().size(), 0);

load_image_future.Release();
load_ad_future.Release();
delete native_ad;
}
Expand Down Expand Up @@ -2062,16 +2073,25 @@ TEST_F(FirebaseGmaTest, TestNativeAdLoadEmptyRequest) {
firebase::Future<firebase::gma::AdResult> load_ad_future =
native_ad->LoadAd(kNativeAdUnit, request);

WaitForCompletion(load_ad_future, "LoadAd");
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
EXPECT_FALSE(
result_ptr->response_info().mediation_adapter_class_name().empty());
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
// Don't fail loadAd, if NoFill occurred.
WaitForCompletionAnyResult(load_ad_future, "LoadAd (ignoring NoFill error)");
EXPECT_TRUE(load_ad_future.error() == firebase::gma::kAdErrorCodeNone ||
load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill);

if (load_ad_future.error() == firebase::gma::kAdErrorCodeNone) {
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
EXPECT_FALSE(
result_ptr->response_info().mediation_adapter_class_name().empty());
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
} else if (load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill) {
LogWarning("LoadAd returned NoFill in TestNativeAdLoadEmptyRequest");
}

load_ad_future.Release();
delete native_ad;
}

Expand All @@ -2088,32 +2108,41 @@ TEST_F(FirebaseGmaTest, TestNativeRecordImpression) {
firebase::Future<firebase::gma::AdResult> load_ad_future =
native_ad->LoadAd(kNativeAdUnit, GetAdRequest());

WaitForCompletion(load_ad_future, "LoadAd");
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
// Don't fail loadAd, if NoFill occurred.
WaitForCompletionAnyResult(load_ad_future, "LoadAd (ignoring NoFill error)");
EXPECT_TRUE(load_ad_future.error() == firebase::gma::kAdErrorCodeNone ||
load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill);

load_ad_future.Release();
// Proceed verifying the RecordImpression, only when loadAd is successful.
if (load_ad_future.error() == firebase::gma::kAdErrorCodeNone) {
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());

firebase::Variant impression_payload = GetVariantMap();
firebase::Variant impression_payload = GetVariantMap();

#if defined(ANDROID)
// Android doesn't have a return type for this API.
WaitForCompletion(native_ad->RecordImpression(impression_payload),
"RecordImpression");
// Android doesn't have a return type for this API.
WaitForCompletion(native_ad->RecordImpression(impression_payload),
"RecordImpression");
#else // iOS
// Test Ad unit IDs are not allowlisted to record impression and the request
// is expected to be rejected by the server. iOS returns the failure.
WaitForCompletion(native_ad->RecordImpression(impression_payload),
"RecordImpression",
firebase::gma::kAdErrorCodeInvalidRequest);
// Test Ad unit IDs are not allowlisted to record impression and the request
// is expected to be rejected by the server. iOS returns the failure.
WaitForCompletion(native_ad->RecordImpression(impression_payload),
"RecordImpression",
firebase::gma::kAdErrorCodeInvalidRequest);
#endif

firebase::Variant str_variant = firebase::Variant::FromMutableString("test");
WaitForCompletion(native_ad->RecordImpression(str_variant),
"RecordImpression 2",
firebase::gma::kAdErrorCodeInvalidArgument);
firebase::Variant str_variant =
firebase::Variant::FromMutableString("test");
WaitForCompletion(native_ad->RecordImpression(str_variant),
"RecordImpression 2",
firebase::gma::kAdErrorCodeInvalidArgument);
} else if (load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill) {
LogWarning("LoadAd returned NoFill in TestNativeRecordImpression");
}

load_ad_future.Release();
delete native_ad;
}

Expand All @@ -2130,22 +2159,31 @@ TEST_F(FirebaseGmaTest, TestNativePerformClick) {
firebase::Future<firebase::gma::AdResult> load_ad_future =
native_ad->LoadAd(kNativeAdUnit, GetAdRequest());

WaitForCompletion(load_ad_future, "LoadAd");
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());
// Don't fail loadAd, if NoFill occurred.
WaitForCompletionAnyResult(load_ad_future, "LoadAd (ignoring NoFill error)");
EXPECT_TRUE(load_ad_future.error() == firebase::gma::kAdErrorCodeNone ||
load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill);

load_ad_future.Release();
// Proceed verifying the PerformClick, only when loadAd is successful.
if (load_ad_future.error() == firebase::gma::kAdErrorCodeNone) {
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
ASSERT_NE(result_ptr, nullptr);
EXPECT_TRUE(result_ptr->is_successful());

firebase::Variant click_payload = GetVariantMap();
firebase::Variant click_payload = GetVariantMap();

// Android and iOS doesn't have a return type for this API.
WaitForCompletion(native_ad->PerformClick(click_payload), "PerformClick");
// Android and iOS doesn't have a return type for this API.
WaitForCompletion(native_ad->PerformClick(click_payload), "PerformClick");

firebase::Variant str_variant = firebase::Variant::FromMutableString("test");
WaitForCompletion(native_ad->PerformClick(str_variant), "PerformClick 2",
firebase::gma::kAdErrorCodeInvalidArgument);
firebase::Variant str_variant =
firebase::Variant::FromMutableString("test");
WaitForCompletion(native_ad->PerformClick(str_variant), "PerformClick 2",
firebase::gma::kAdErrorCodeInvalidArgument);
} else if (load_ad_future.error() == firebase::gma::kAdErrorCodeNoFill) {
LogWarning("LoadAd returned NoFill in TestNativePerformClick");
}

load_ad_future.Release();
delete native_ad;
}

Expand Down