@@ -21,6 +21,9 @@ import com.google.ads.mediation.pangle.utils.mockPangleSdkInitializationSuccess
2121import com.google.android.gms.ads.AdError
2222import com.google.android.gms.ads.AdFormat
2323import com.google.android.gms.ads.AdSize
24+ import com.google.android.gms.ads.AgeRestrictedTreatment
25+ import com.google.android.gms.ads.MobileAds
26+ import com.google.android.gms.ads.RequestConfiguration
2427import com.google.android.gms.ads.mediation.InitializationCompleteCallback
2528import com.google.android.gms.ads.mediation.MediationAdLoadCallback
2629import com.google.android.gms.ads.mediation.MediationAppOpenAd
@@ -104,6 +107,16 @@ class PangleMediationAdapterTest {
104107 // Resetting the PA Consent Information to their default value.
105108 PangleMediationAdapter .setPAConsent(PAGPAConsentType .PAG_PA_CONSENT_TYPE_CONSENT )
106109
110+ val requestConfiguration =
111+ RequestConfiguration .Builder ()
112+ .setTagForChildDirectedTreatment(
113+ RequestConfiguration .TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
114+ )
115+ .setTagForUnderAgeOfConsent(RequestConfiguration .TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED )
116+ .setAgeRestrictedTreatment(AgeRestrictedTreatment .UNSPECIFIED )
117+ .build()
118+ MobileAds .setRequestConfiguration(requestConfiguration)
119+
107120 pangleMediationAdapter =
108121 PangleMediationAdapter (pangleInitializer, pangleSdkWrapper, pangleFactory)
109122 }
@@ -161,6 +174,32 @@ class PangleMediationAdapterTest {
161174 assertThat(error.domain).isEqualTo(PANGLE_SDK_ERROR_DOMAIN )
162175 }
163176
177+ @Test
178+ fun collectSignals_withAgeRestrictedTreatmentChild_callsOnFailure () {
179+ val requestConfiguration =
180+ RequestConfiguration .Builder ()
181+ .setTagForChildDirectedTreatment(
182+ RequestConfiguration .TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
183+ )
184+ .setTagForUnderAgeOfConsent(RequestConfiguration .TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED )
185+ .setAgeRestrictedTreatment(AgeRestrictedTreatment .CHILD )
186+ .build()
187+ MobileAds .setRequestConfiguration(requestConfiguration)
188+ val signalCallbacks: SignalCallbacks = mock()
189+
190+ pangleMediationAdapter.collectSignals(
191+ RtbSignalData (context, emptyList(), bundleOf(), AdSize (1 , 1 )),
192+ signalCallbacks,
193+ )
194+
195+ val errorCaptor = argumentCaptor<AdError >()
196+ verify(signalCallbacks).onFailure(errorCaptor.capture())
197+ val error = errorCaptor.firstValue
198+ assertThat(error.code).isEqualTo(PangleConstants .ERROR_CHILD_USER )
199+ assertThat(error.domain).isEqualTo(PangleConstants .ERROR_DOMAIN )
200+ assertThat(error.message).isEqualTo(PangleConstants .ERROR_MSG_CHILD_USER )
201+ }
202+
164203 @Test
165204 fun initialize_ifAppIdsAreMissing_callsFailureCallback () {
166205 // Create server parameters without app ID.
@@ -220,6 +259,28 @@ class PangleMediationAdapterTest {
220259 verify(initializationCompleteCallback).onInitializationFailed(PANGLE_INIT_FAILURE_MESSAGE )
221260 }
222261
262+ @Test
263+ fun initialize_withAgeRestrictedTreatmentChild_callsFailureCallback () {
264+ val requestConfiguration =
265+ RequestConfiguration .Builder ()
266+ .setTagForChildDirectedTreatment(
267+ RequestConfiguration .TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
268+ )
269+ .setTagForUnderAgeOfConsent(RequestConfiguration .TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED )
270+ .setAgeRestrictedTreatment(AgeRestrictedTreatment .CHILD )
271+ .build()
272+ MobileAds .setRequestConfiguration(requestConfiguration)
273+
274+ pangleMediationAdapter.initialize(
275+ context,
276+ initializationCompleteCallback,
277+ listOf (buildProperMediationConfig()),
278+ )
279+
280+ verify(initializationCompleteCallback)
281+ .onInitializationFailed(PangleConstants .ERROR_MSG_CHILD_USER )
282+ }
283+
223284 @Test
224285 fun getVersionInfo_ifAdapterVersionHasLessThanFourParts_returnsZeros () {
225286 // "3.1.4" is invalid because adapter version should contain at least four parts delimited by
@@ -285,6 +346,28 @@ class PangleMediationAdapterTest {
285346 verify(bannerAd).render(bannerAdConfig)
286347 }
287348
349+ @Test
350+ fun loadBannerAd_withAgeRestrictedTreatmentChild_callsOnFailure () {
351+ val requestConfiguration =
352+ RequestConfiguration .Builder ()
353+ .setTagForChildDirectedTreatment(
354+ RequestConfiguration .TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
355+ )
356+ .setTagForUnderAgeOfConsent(RequestConfiguration .TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED )
357+ .setAgeRestrictedTreatment(AgeRestrictedTreatment .CHILD )
358+ .build()
359+ MobileAds .setRequestConfiguration(requestConfiguration)
360+
361+ pangleMediationAdapter.loadBannerAd(bannerAdConfig, bannerAdLoadCallback)
362+
363+ val errorCaptor = argumentCaptor<AdError >()
364+ verify(bannerAdLoadCallback).onFailure(errorCaptor.capture())
365+ val error = errorCaptor.firstValue
366+ assertThat(error.code).isEqualTo(PangleConstants .ERROR_CHILD_USER )
367+ assertThat(error.domain).isEqualTo(PangleConstants .ERROR_DOMAIN )
368+ assertThat(error.message).isEqualTo(PangleConstants .ERROR_MSG_CHILD_USER )
369+ }
370+
288371 @Test
289372 fun loadInterstitialAd_rendersInterstitialAd () {
290373 pangleMediationAdapter.loadInterstitialAd(interstitialAdConfig, interstitialAdLoadCallback)
0 commit comments