@@ -159,6 +159,7 @@ class FirebaseGmaTest : public FirebaseTest {
159159
160160 protected:
161161 firebase::gma::AdRequest GetAdRequest ();
162+ firebase::Variant GetVariantMap ();
162163
163164 static firebase::App* shared_app_;
164165};
@@ -285,6 +286,20 @@ firebase::gma::AdRequest FirebaseGmaTest::GetAdRequest() {
285286 return request;
286287}
287288
289+ firebase::Variant FirebaseGmaTest::GetVariantMap () {
290+ firebase::Variant in_key = firebase::Variant::FromMutableString (" inner_key" );
291+ firebase::Variant in_val = firebase::Variant::FromMutableString (" inner_val" );
292+ firebase::Variant out_key = firebase::Variant::FromMutableString (" outer_key" );
293+
294+ firebase::Variant out_val = firebase::Variant::EmptyMap ();
295+ out_val.map ()[in_key] = in_val;
296+
297+ firebase::Variant variant_map = firebase::Variant::EmptyMap ();
298+ variant_map.map ()[out_key] = out_val;
299+
300+ return variant_map;
301+ }
302+
288303FirebaseGmaUITest::FirebaseGmaUITest () {}
289304
290305FirebaseGmaUITest::~FirebaseGmaUITest () {}
@@ -399,6 +414,8 @@ TEST_F(FirebaseGmaTest, TestSetAppKeyEnabled) {
399414
400415TEST_F (FirebaseGmaTest, TestGetAdRequest) { GetAdRequest (); }
401416
417+ TEST_F (FirebaseGmaTest, TestGetVariantMap) { GetVariantMap (); }
418+
402419TEST_F (FirebaseGmaTest, TestGetAdRequestValues) {
403420 SKIP_TEST_ON_DESKTOP;
404421
@@ -2058,6 +2075,80 @@ TEST_F(FirebaseGmaTest, TestNativeAdLoadEmptyRequest) {
20582075 delete native_ad;
20592076}
20602077
2078+ TEST_F (FirebaseGmaTest, TestNativeRecordImpression) {
2079+ SKIP_TEST_ON_DESKTOP;
2080+ SKIP_TEST_ON_SIMULATOR;
2081+
2082+ firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd ();
2083+
2084+ WaitForCompletion (native_ad->Initialize (app_framework::GetWindowContext ()),
2085+ " Initialize" );
2086+
2087+ // When the NativeAd is initialized, load an ad.
2088+ firebase::Future<firebase::gma::AdResult> load_ad_future =
2089+ native_ad->LoadAd (kNativeAdUnit , GetAdRequest ());
2090+
2091+ WaitForCompletion (load_ad_future, " LoadAd" );
2092+ const firebase::gma::AdResult* result_ptr = load_ad_future.result ();
2093+ ASSERT_NE (result_ptr, nullptr );
2094+ EXPECT_TRUE (result_ptr->is_successful ());
2095+
2096+ load_ad_future.Release ();
2097+
2098+ firebase::Variant impression_payload = GetVariantMap ();
2099+
2100+ #if defined(ANDROID)
2101+ // Android doesn't have a return type for this API.
2102+ WaitForCompletion (native_ad->RecordImpression (impression_payload),
2103+ " RecordImpression" );
2104+ #else // iOS
2105+ // Test Ad unit IDs are not allowlisted to record impression and the request
2106+ // is expected to be rejected by the server. iOS returns the failure.
2107+ WaitForCompletion (native_ad->RecordImpression (impression_payload),
2108+ " RecordImpression" ,
2109+ firebase::gma::kAdErrorCodeInvalidRequest );
2110+ #endif
2111+
2112+ firebase::Variant str_variant = firebase::Variant::FromMutableString (" test" );
2113+ WaitForCompletion (native_ad->RecordImpression (str_variant),
2114+ " RecordImpression 2" ,
2115+ firebase::gma::kAdErrorCodeInvalidArgument );
2116+
2117+ delete native_ad;
2118+ }
2119+
2120+ TEST_F (FirebaseGmaTest, TestNativePerformClick) {
2121+ SKIP_TEST_ON_DESKTOP;
2122+ SKIP_TEST_ON_SIMULATOR;
2123+
2124+ firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd ();
2125+
2126+ WaitForCompletion (native_ad->Initialize (app_framework::GetWindowContext ()),
2127+ " Initialize" );
2128+
2129+ // When the NativeAd is initialized, load an ad.
2130+ firebase::Future<firebase::gma::AdResult> load_ad_future =
2131+ native_ad->LoadAd (kNativeAdUnit , GetAdRequest ());
2132+
2133+ WaitForCompletion (load_ad_future, " LoadAd" );
2134+ const firebase::gma::AdResult* result_ptr = load_ad_future.result ();
2135+ ASSERT_NE (result_ptr, nullptr );
2136+ EXPECT_TRUE (result_ptr->is_successful ());
2137+
2138+ load_ad_future.Release ();
2139+
2140+ firebase::Variant click_payload = GetVariantMap ();
2141+
2142+ // Android and iOS doesn't have a return type for this API.
2143+ WaitForCompletion (native_ad->PerformClick (click_payload), " PerformClick" );
2144+
2145+ firebase::Variant str_variant = firebase::Variant::FromMutableString (" test" );
2146+ WaitForCompletion (native_ad->PerformClick (str_variant), " PerformClick 2" ,
2147+ firebase::gma::kAdErrorCodeInvalidArgument );
2148+
2149+ delete native_ad;
2150+ }
2151+
20612152TEST_F (FirebaseGmaTest, TestNativeAdErrorNotInitialized) {
20622153 SKIP_TEST_ON_DESKTOP;
20632154
@@ -2067,6 +2158,12 @@ TEST_F(FirebaseGmaTest, TestNativeAdErrorNotInitialized) {
20672158 WaitForCompletion (native_ad->LoadAd (kNativeAdUnit , request), " LoadAd" ,
20682159 firebase::gma::kAdErrorCodeUninitialized );
20692160
2161+ firebase::Variant variant = firebase::Variant::EmptyMap ();
2162+ WaitForCompletion (native_ad->RecordImpression (variant), " RecordImpression" ,
2163+ firebase::gma::kAdErrorCodeUninitialized );
2164+ WaitForCompletion (native_ad->PerformClick (variant), " PerformClick" ,
2165+ firebase::gma::kAdErrorCodeUninitialized );
2166+
20702167 delete native_ad;
20712168}
20722169
0 commit comments