Skip to content

Commit

Permalink
[DIA-3566] Support non-TCF GCM 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
carmelo-iriti committed Feb 8, 2024
1 parent d08fe01 commit 6534588
Show file tree
Hide file tree
Showing 8 changed files with 1,587 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder

object SpConsentStatusSerializer : KSerializer<GCMStatus> {
object SpConsentStatusSerializer : KSerializer<GCMStatus?> {

override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("SpConsentStatus", PrimitiveKind.STRING)

override fun deserialize(decoder: Decoder): GCMStatus {
override fun deserialize(decoder: Decoder): GCMStatus? {
val code = decoder.decodeString()
return GCMStatus.values()
.find { m -> m.status == code }
?: GCMStatus.DENIED
}

override fun serialize(encoder: Encoder, value: GCMStatus) {
encoder.encodeString(value.status)
override fun serialize(encoder: Encoder, value: GCMStatus?) {
value?.let { encoder.encodeString(it.status) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.sourcepoint.cmplibrary.data.network.converter

import com.sourcepoint.cmplibrary.* //ktlint-disable
import com.sourcepoint.cmplibrary.core.Either
import com.sourcepoint.cmplibrary.data.network.model.optimized.GCMStatus
import com.sourcepoint.cmplibrary.exception.CampaignType
import com.sourcepoint.cmplibrary.model.* //ktlint-disable
import com.sourcepoint.cmplibrary.model.exposed.MessageSubCategory
Expand All @@ -14,6 +15,58 @@ class JsonConverterImplTest {

private val sut = JsonConverter.create()

@Test
fun `GIVEN a GCM obj with ACCEPT_ALL consent RETURN all GRANTED fields`() {
val json = "gcm/gcm_acceptAll.json".file2String()

val output = (sut.toChoiceResp(json) as Either.Right).r
output.gdpr!!.googleConsentMode.also {
it!!.adStorage.assertEquals(GCMStatus.GRANTED)
it.adPersonalization.assertEquals(GCMStatus.GRANTED)
it.adUserData.assertEquals(GCMStatus.GRANTED)
it.analyticsStorage.assertEquals(GCMStatus.GRANTED)
}
}

@Test
fun `GIVEN a GCM obj with REJECT_ALL consent RETURN all DENIED fields`() {
val json = "gcm/gcm_rejectAll.json".file2String()

val output = (sut.toChoiceResp(json) as Either.Right).r
output.gdpr!!.googleConsentMode.also {
it!!.adStorage.assertEquals(GCMStatus.DENIED)
it.adPersonalization.assertEquals(GCMStatus.DENIED)
it.adUserData.assertEquals(GCMStatus.DENIED)
it.analyticsStorage.assertEquals(GCMStatus.DENIED)
}
}

@Test
fun `GIVEN a GCM obj with SAVE_AND_EXIT consent RETURN all DENIED fields`() {
val json = "gcm/gcm_save_exit.json".file2String()

val output = (sut.toChoiceResp(json) as Either.Right).r
output.gdpr!!.googleConsentMode.also {
it!!.adStorage.assertEquals(GCMStatus.DENIED)
it.adPersonalization.assertEquals(GCMStatus.DENIED)
it.adUserData.assertEquals(GCMStatus.GRANTED)
it.analyticsStorage.assertEquals(GCMStatus.GRANTED)
}
}

@Test
fun `GIVEN a GCM obj with a missing adPersonalization field RETURN a null value for that property`() {
val json = "gcm/gcm_one_null_key.json".file2String()

val output = (sut.toChoiceResp(json) as Either.Right).r
output.gdpr!!.googleConsentMode.also {
it!!.adPersonalization.assertNull()
it.adStorage.assertEquals(GCMStatus.GRANTED)
it.adUserData.assertEquals(GCMStatus.GRANTED)
it.analyticsStorage.assertEquals(GCMStatus.GRANTED)
}
}

@Test
fun `GIVEN a ACCEPT_ALL consent body resp RETURN a right object`() {
val json = "consent_resp/consent_accept_all.json".file2String()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ class MainActivityKotlinTest {
"5ff4d000a228633ac048be41",
"5f1b2fbeb8e05c306f2a1eb9",
"5e7ced57b8e05c485246cce0",
"5e7e1298b8e05c4854221be9",
).sorted()

loadKoinModules(
Expand All @@ -153,13 +154,6 @@ class MainActivityKotlinTest {

wr(backup = { clickOnRefreshBtnActivity() }) { tapAcceptOnWebView() }

wr {
scenario.onActivity { activity ->
// TODO
// PreferenceManager.getDefaultSharedPreferences(activity).contains("sp.gdpr.consentUUID").assertTrue()
}
}

wr { clickOnGdprReviewConsent() }
wr(backup = { clickOnGdprReviewConsent() }) { checkAllGdprConsentsOn() }

Expand Down
169 changes: 98 additions & 71 deletions samples/app/src/androidTest/java/com/sourcepoint/app/v6/TestData.kt

Large diffs are not rendered by default.

Loading

0 comments on commit 6534588

Please sign in to comment.