From 3052ca9f3140d35c2f547bb3083600b5674f4c3c Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Thu, 4 Dec 2025 14:23:43 +0200 Subject: [PATCH 1/6] Tests: Fix flaky GPP tests and refactor code --- .../model/config/DataActivity.groovy | 19 +- .../model/config/EqualityValueRule.groovy | 5 + .../model/config/GppModuleConfig.groovy | 37 +- .../UsCaliforniaV1ChildSensitiveData.groovy | 16 +- .../UsConnecticutV1ChildSensitiveData.groovy | 8 +- .../privacy/GppFetchBidActivitiesSpec.groovy | 435 ++++++--- .../privacy/GppSyncUserActivitiesSpec.groovy | 699 ++++++++------ .../GppTransmitEidsActivitiesSpec.groovy | 903 ++++++++++-------- ...GppTransmitPreciseGeoActivitiesSpec.groovy | 375 +++++--- .../GppTransmitUfpdActivitiesSpec.groovy | 641 ++++++++----- .../tests/privacy/PrivacyBaseSpec.groovy | 95 ++ 11 files changed, 1987 insertions(+), 1246 deletions(-) diff --git a/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy b/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy index 64434cb67f7..18ece88a4c9 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy @@ -1,6 +1,7 @@ package org.prebid.server.functional.model.config import com.fasterxml.jackson.annotation.JsonValue +import org.prebid.server.functional.model.privacy.gpp.GppDataActivity enum DataActivity { @@ -9,7 +10,23 @@ enum DataActivity { NOTICE_NOT_PROVIDED(2), NO_CONSENT(1), CONSENT(2), - INVALID(-1), + INVALID(-1) + + static DataActivity fromGppDataActivity(GppDataActivity gppActivity) { + if (gppActivity == null) { + return INVALID; + } + switch (gppActivity) { + case GppDataActivity.NOT_APPLICABLE: + return NOT_APPLICABLE + case GppDataActivity.NO_CONSENT: + return NO_CONSENT + case GppDataActivity.CONSENT: + return CONSENT + default: + return INVALID + } + } @JsonValue final int dataActivityBits diff --git a/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy b/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy index 5e7cbf33476..ec42cd66ad5 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.annotation.JsonDeserialize import groovy.transform.ToString +import org.prebid.server.functional.model.privacy.gpp.GppDataActivity @ToString(includeNames = true, ignoreNulls = true) @JsonDeserialize(using = EqualityValueRuleDeserialize.class) @@ -16,6 +17,10 @@ class EqualityValueRule extends ValueRestrictedRule { super(privacySection, value) } + EqualityValueRule(UsNationalPrivacySection privacySection, GppDataActivity value) { + super(privacySection, DataActivity.fromGppDataActivity(value)) + } + static class EqualityValueRuleDeserialize extends JsonDeserializer { @Override diff --git a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy index 7afeed64fa8..2f683492acf 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy @@ -4,6 +4,9 @@ import com.fasterxml.jackson.annotation.JsonProperty import groovy.transform.ToString import org.prebid.server.functional.model.request.GppSectionId +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.CAMEL_CASE +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.KEBAB_CASE + @ToString(includeNames = true, ignoreNulls = true) class GppModuleConfig { @@ -31,31 +34,25 @@ class GppModuleConfig { static GppModuleConfig getDefaultModuleConfig(ActivityConfig activityConfig = ActivityConfig.configWithDefaultRestrictRules, List sids = [GppSectionId.US_NAT_V1], - Boolean normalizeFlags = true) { - new GppModuleConfig().tap { - it.activityConfig = [activityConfig] - it.sids = sids - it.normalizeFlags = normalizeFlags - } - } + Boolean normalizeFlags = true, + ConfigCase configCase = CAMEL_CASE) { - static GppModuleConfig getDefaultModuleConfigSnakeCase(ActivityConfig activityConfig = ActivityConfig.configWithDefaultRestrictRules, - List sids = [GppSectionId.US_NAT_V1], - Boolean normalizeFlags = true) { new GppModuleConfig().tap { - it.activityConfigSnakeCase = [activityConfig] it.sids = sids - it.normalizeFlagsSnakeCase = normalizeFlags + if (configCase == CAMEL_CASE) { + it.activityConfig = [activityConfig] + it.normalizeFlags = normalizeFlags + } else if (configCase = KEBAB_CASE) { + it.activityConfigKebabCase = [activityConfig] + it.normalizeFlagsKebabCase = normalizeFlags + } else { + it.activityConfigSnakeCase = [activityConfig] + it.normalizeFlagsSnakeCase = normalizeFlags + } } } - static GppModuleConfig getDefaultModuleConfigKebabCase(ActivityConfig activityConfig = ActivityConfig.configWithDefaultRestrictRules, - List sids = [GppSectionId.US_NAT_V1], - Boolean normalizeFlags = true) { - new GppModuleConfig().tap { - it.activityConfigKebabCase = [activityConfig] - it.sids = sids - it.normalizeFlagsKebabCase = normalizeFlags - } + enum ConfigCase { + CAMEL_CASE, KEBAB_CASE, SNAKE_CASE } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy index 92b9ddcc8db..8439b3eb86e 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy @@ -4,26 +4,28 @@ import org.prebid.server.functional.util.PBSUtils class UsCaliforniaV1ChildSensitiveData { - GppDataActivity childUnder13 - GppDataActivity childFrom13to16 + GppDataActivity toSellUnder16 + GppDataActivity toShareUnder16 + + static UsCaliforniaV1ChildSensitiveData getDefault(GppDataActivity childUnder13 = GppDataActivity.NOT_APPLICABLE, GppDataActivity childFrom13to16 = GppDataActivity.NOT_APPLICABLE) { new UsCaliforniaV1ChildSensitiveData().tap { - it.childUnder13 = childUnder13 - it.childFrom13to16 = childFrom13to16 + it.toSellUnder16 = childUnder13 + it.toShareUnder16 = childFrom13to16 } } static UsCaliforniaV1ChildSensitiveData getRandom(List excludedActivities) { new UsCaliforniaV1ChildSensitiveData().tap { - it.childUnder13 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom13to16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) + it.toSellUnder16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) + it.toShareUnder16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) } } List getContentList() { - [childFrom13to16, childUnder13]*.value.collect { it ?: 0 } + [toShareUnder16, toSellUnder16]*.value.collect { it ?: 0 } } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy index 78ec426efb5..53fd8a9ae68 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy @@ -6,7 +6,7 @@ class UsConnecticutV1ChildSensitiveData { GppDataActivity childUnder13 GppDataActivity childFrom13to16 - GppDataActivity childFrom16to18 + GppDataActivity childFrom13to16Targeted static UsConnecticutV1ChildSensitiveData getDefault(GppDataActivity childUnder13 = GppDataActivity.NOT_APPLICABLE, GppDataActivity childFrom13to16 = GppDataActivity.NOT_APPLICABLE, @@ -15,7 +15,7 @@ class UsConnecticutV1ChildSensitiveData { new UsConnecticutV1ChildSensitiveData().tap { it.childUnder13 = childUnder13 it.childFrom13to16 = childFrom13to16 - it.childFrom16to18 = childFrom16to18 + it.childFrom13to16Targeted = childFrom16to18 } } @@ -23,11 +23,11 @@ class UsConnecticutV1ChildSensitiveData { new UsConnecticutV1ChildSensitiveData().tap { it.childUnder13 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) it.childFrom13to16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom16to18 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) + it.childFrom13to16Targeted = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) } } List getContentList() { - [childFrom13to16, childUnder13, childFrom16to18]*.value.collect { it ?: 0 } + [childUnder13, childFrom13to16, childFrom13to16Targeted]*.value.collect { it ?: 0 } } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy index 8b9f0f5e4ad..ae8267076ce 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy @@ -2,21 +2,16 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule import org.prebid.server.functional.model.config.LogicalRestrictedRule import org.prebid.server.functional.model.db.Account import org.prebid.server.functional.model.db.StoredRequest -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity import org.prebid.server.functional.model.privacy.gpp.MspaMode -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.auction.Activity import org.prebid.server.functional.model.request.auction.ActivityRule @@ -34,18 +29,14 @@ import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED -import static org.prebid.server.functional.model.config.DataActivity.CONSENT -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_NOT_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOT_APPLICABLE -import static org.prebid.server.functional.model.config.DataActivity.NO_CONSENT +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.CAMEL_CASE +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.KEBAB_CASE +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.SNAKE_CASE import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 @@ -66,11 +57,14 @@ import static org.prebid.server.functional.model.config.UsNationalPrivacySection import static org.prebid.server.functional.model.config.UsNationalPrivacySection.SHARING_NOTICE import static org.prebid.server.functional.model.pricefloors.Country.CAN import static org.prebid.server.functional.model.pricefloors.Country.USA -import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.ACCOUNT_PROCESSED_RULES_COUNT -import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.PROCESSED_ACTIVITY_RULES_COUNT +import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_REQUEST_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.CONSENT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NOT_APPLICABLE +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NO_CONSENT import static org.prebid.server.functional.model.request.GppSectionId.USP_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 @@ -704,55 +698,55 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { gppConsent << [ new UsNatV2Consent.Builder().setSensitiveDataProcessing( new UsNationalV2SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT, - consumerHealthData: GppDataActivity.CONSENT, - crimeVictim: GppDataActivity.CONSENT, - nationalOrigin: GppDataActivity.CONSENT, - transgenderStatus: GppDataActivity.CONSENT + racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT, + consumerHealthData: CONSENT, + crimeVictim: CONSENT, + nationalOrigin: CONSENT, + transgenderStatus: CONSENT )), new UsNatV2Consent.Builder().setSensitiveDataProcessing( new UsNationalV2SensitiveData( - racialEthnicOrigin: GppDataActivity.NO_CONSENT, - religiousBeliefs: GppDataActivity.NO_CONSENT, - healthInfo: GppDataActivity.NO_CONSENT, - orientation: GppDataActivity.NO_CONSENT, - citizenshipStatus: GppDataActivity.NO_CONSENT, - unionMembership: GppDataActivity.NO_CONSENT, - consumerHealthData: GppDataActivity.NO_CONSENT, - nationalOrigin: GppDataActivity.NO_CONSENT + racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT, + consumerHealthData: NO_CONSENT, + nationalOrigin: NO_CONSENT )), new UsNatV2Consent.Builder().setSensitiveDataProcessing( new UsNationalV2SensitiveData( - geneticId: GppDataActivity.NO_CONSENT, - biometricId: GppDataActivity.NO_CONSENT, - idNumbers: GppDataActivity.NO_CONSENT, - accountInfo: GppDataActivity.NO_CONSENT, - communicationContents: GppDataActivity.NO_CONSENT, - crimeVictim: GppDataActivity.NO_CONSENT, - transgenderStatus: GppDataActivity.NO_CONSENT + geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT, + crimeVictim: NO_CONSENT, + transgenderStatus: NO_CONSENT )), new UsNatV2Consent.Builder().setSensitiveDataProcessing( new UsNationalV2SensitiveData( - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT, - crimeVictim: GppDataActivity.CONSENT, - transgenderStatus: GppDataActivity.CONSENT + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT, + crimeVictim: CONSENT, + transgenderStatus: CONSENT )), new UsNatV2Consent.Builder().setKnownChildSensitiveDataConsents( - new UsNationalV2ChildSensitiveData(childFrom16to17: GppDataActivity.NO_CONSENT)) + new UsNationalV2ChildSensitiveData(childFrom16to17: NO_CONSENT)) ] } @@ -846,6 +840,8 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { def activities = AllowActivities.getDefaultAllowActivities(FETCH_BIDS, Activity.getDefaultActivity([rule])) and: "Account gpp configuration with sid skip" + def activityConfig = new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(operator, rulesList)) + def accountLogic = GppModuleConfig.getDefaultModuleConfig(activityConfig, [US_NAT_V1], false, caseType) def accountGppConfig = new AccountGppConfig().tap { it.code = IAB_US_CUSTOM_LOGIC it.enabled = true @@ -863,16 +859,21 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { assert bidder.getBidderRequest(bidRequest.id) where: - gpcValue | accountLogic - false | GppModuleConfig.getDefaultModuleConfig(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfig(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfig(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)])), [US_NAT_V1], false) - false | GppModuleConfig.getDefaultModuleConfigKebabCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfigKebabCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfigKebabCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)])), [US_NAT_V1], false) - false | GppModuleConfig.getDefaultModuleConfigSnakeCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfigSnakeCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)])), [US_NAT_V1], false) - true | GppModuleConfig.getDefaultModuleConfigSnakeCase(new ActivityConfig([FETCH_BIDS], LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)])), [US_NAT_V1], false) + gpcValue | operator | caseType | rulesList + false | OR | CAMEL_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | OR | CAMEL_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | AND | CAMEL_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] + + false | OR | KEBAB_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | OR | KEBAB_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | AND | KEBAB_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] + + false | OR | SNAKE_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | OR | SNAKE_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + true | AND | SNAKE_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] } def "PBS auction call when privacy regulation match custom requirement should ignore call to bidder"() { @@ -909,14 +910,14 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { assert bidder.getBidderRequests(bidRequest.id).size() == 0 where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should process request and emit error log"() { @@ -974,7 +975,7 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = BidRequest.defaultBidRequest.tap { regs.gppSid = [gppSid.intValue] - regs.gpp = gppStateConsent.build() + regs.gpp = gppStateConsent setAccountId(accountId) } @@ -1006,51 +1007,123 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS amp call when bidder allowed in activities should process bid request and proper metrics and update processed metrics"() { @@ -1587,10 +1660,10 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS amp call when privacy regulation match custom requirement should ignore call to bidder"() { @@ -1637,14 +1710,14 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { assert !bidder.getBidderRequests(ampStoredRequest.id).size() where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should process request and emit error log"() { @@ -1717,7 +1790,7 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { def ampRequest = AmpRequest.defaultAmpRequest.tap { it.account = accountId it.gppSid = gppSid.intValue - it.consentString = gppStateConsent.build() + it.consentString = gppStateConsent it.consentType = GPP } @@ -1756,50 +1829,122 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy index 3392bcf1bfd..cbc18d04b9f 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy @@ -7,22 +7,16 @@ import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.AccountPrivacyConfig import org.prebid.server.functional.model.config.AccountSetting import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule import org.prebid.server.functional.model.config.LogicalRestrictedRule import org.prebid.server.functional.model.db.Account -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity import org.prebid.server.functional.model.privacy.gpp.MspaMode import org.prebid.server.functional.model.privacy.gpp.Notice import org.prebid.server.functional.model.privacy.gpp.OptOut -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsNationalV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData import org.prebid.server.functional.model.request.auction.Activity import org.prebid.server.functional.model.request.auction.ActivityRule import org.prebid.server.functional.model.request.auction.AllowActivities @@ -37,18 +31,11 @@ import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static org.prebid.server.functional.model.bidder.BidderName.GENERIC -import static org.prebid.server.functional.model.config.DataActivity.CONSENT -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_NOT_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOT_APPLICABLE -import static org.prebid.server.functional.model.config.DataActivity.NO_CONSENT import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 @@ -72,6 +59,10 @@ import static org.prebid.server.functional.model.pricefloors.Country.USA import static org.prebid.server.functional.model.privacy.Metric.PROCESSED_ACTIVITY_RULES_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_REQUEST_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.CONSENT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NOT_APPLICABLE +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NO_CONSENT +import static org.prebid.server.functional.model.privacy.gpp.UsNationalV1ChildSensitiveData.getDefault import static org.prebid.server.functional.model.request.GppSectionId.USP_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 @@ -129,8 +120,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: "Activities fields name in different case" activities << [AllowActivities.getDefaultAllowActivities(SYNC_USER, Activity.defaultActivity), new AllowActivities().tap { syncUserKebabCase = Activity.defaultActivity }, - new AllowActivities().tap { syncUserKebabCase = Activity.defaultActivity }, - ] + new AllowActivities().tap { syncUserKebabCase = Activity.defaultActivity },] } def "PBS cookie sync call when bidder rejected in activities should exclude bidders URLs with proper message and update disallowed metrics"() { @@ -161,8 +151,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: "Activities fields name in different case" activities << [AllowActivities.getDefaultAllowActivities(SYNC_USER, Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)])), new AllowActivities().tap { syncUserKebabCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) }, - new AllowActivities().tap { syncUserKebabCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) }, - ] + new AllowActivities().tap { syncUserKebabCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) },] } def "PBS cookie sync call when default activity setting set to false should exclude bidders URLs"() { @@ -413,66 +402,64 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert !response.bidderStatus.userSync.url where: - disallowGppLogic << [ - SIMPLE_GPC_DISALLOW_LOGIC, - new UsNatV1Consent.Builder() - .setMspaServiceProviderMode(MspaMode.YES) - .setMspaOptOutOptionMode(MspaMode.NO) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) - .build(), - new UsNatV1Consent.Builder() - .setSharingNotice(Notice.NOT_PROVIDED) - .setSharingOptOutNotice(Notice.PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setSharingNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) - .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build() - ] + disallowGppLogic << [SIMPLE_GPC_DISALLOW_LOGIC, + new UsNatV1Consent.Builder() + .setMspaServiceProviderMode(MspaMode.YES) + .setMspaOptOutOptionMode(MspaMode.NO) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(NOT_APPLICABLE, NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(NO_CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setPersonalDataConsents(CONSENT) + .build(), + new UsNatV1Consent.Builder() + .setSharingNotice(Notice.NOT_PROVIDED) + .setSharingOptOutNotice(Notice.PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setSharingNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) + .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build()] } def "PBS cookie sync call should exclude bidders URLs when privacy module contain opt out of disallow GPP logic"() { @@ -505,17 +492,15 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert !response.bidderStatus.userSync.url where: - disallowGppLogic << [ - new UsNatV2Consent.Builder() - .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.DID_NOT_OPT_OUT) - .build() - ] + disallowGppLogic << [new UsNatV2Consent.Builder() + .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.DID_NOT_OPT_OUT) + .build()] } def "PBS cookie sync call should exclude bidders URLs when privacy module contain disallow child sensitive data logic US nat v2 validation"() { @@ -526,7 +511,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { it.account = accountId it.gpp = new UsNatV2Consent.Builder() .setKnownChildSensitiveDataConsents(usNationalV2ChildSensitiveData) - .build() + .build() } and: "Activities set for cookie sync with allowing privacy regulation" @@ -550,11 +535,9 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert !response.bidderStatus.userSync.url where: - usNationalV2ChildSensitiveData << [ - new UsNationalV2ChildSensitiveData(childUnder13: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom13to16: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom16to17: GppDataActivity.NO_CONSENT) - ] + usNationalV2ChildSensitiveData << [new UsNationalV2ChildSensitiveData(childUnder13: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom13to16: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom16to17: NO_CONSENT)] } def "PBS cookie sync call should respond with required bidder URL and emit error log when privacy module contain invalid GPP segment"() { @@ -602,8 +585,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { and: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + - "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS cookie sync call when privacy module contain invalid GPP string should respond with required bidder URL and emit warning in response"() { @@ -677,13 +659,13 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert !response.bidderStatus.userSync.url where: - gppConsent | gppSid + gppConsent | gppSid new UsNatV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_NAT_V1 - new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 - new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 - new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 - new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 - new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 + new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 + new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 + new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 + new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 + new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 } def "PBS cookie sync call when privacy modules contain allowing settings should include proper responded with bidders URLs"() { @@ -714,10 +696,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert response.getBidderUserSync(GENERIC).userSync.url where: - accountGppConfig << [ - new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) - ] + accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] } def "PBS cookie sync call when regs.gpp in request is allowing should include proper responded with bidders URLs"() { @@ -869,10 +849,10 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS cookie sync when privacy regulation match custom requirement should exclude bidders URLs"() { @@ -909,14 +889,14 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert !response.bidderStatus.userSync.url where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS cookie sync call when custom privacy regulation empty and normalize is disabled should respond with an error and update metric"() { @@ -974,7 +954,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def cookieSyncRequest = CookieSyncRequest.defaultCookieSyncRequest.tap { it.gppSid = gppSid.intValue it.account = accountId - it.gpp = gppStateConsent.build() + it.gpp = gppStateConsent } and: "Activities set for transmit ufpd with allowing privacy regulation" @@ -1005,51 +985,123 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS setuid request when bidder allowed in activities should respond with valid bidders UIDs cookies and update processed metrics"() { @@ -1399,66 +1451,64 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert exception.responseBody == INVALID_STATUS_MESSAGE where: - disallowGppLogic << [ - SIMPLE_GPC_DISALLOW_LOGIC, - new UsNatV1Consent.Builder() - .setMspaServiceProviderMode(MspaMode.YES) - .setMspaOptOutOptionMode(MspaMode.NO) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) - .build(), - new UsNatV1Consent.Builder() - .setSharingNotice(Notice.NOT_PROVIDED) - .setSharingOptOutNotice(Notice.PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setSharingNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) - .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build() - ] + disallowGppLogic << [SIMPLE_GPC_DISALLOW_LOGIC, + new UsNatV1Consent.Builder() + .setMspaServiceProviderMode(MspaMode.YES) + .setMspaOptOutOptionMode(MspaMode.NO) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(NOT_APPLICABLE, NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(getDefault(NO_CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setPersonalDataConsents(CONSENT) + .build(), + new UsNatV1Consent.Builder() + .setSharingNotice(Notice.NOT_PROVIDED) + .setSharingOptOutNotice(Notice.PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setSharingNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) + .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build()] } def "PBS setuid request should reject bidders with status code invalidStatusCode when privacy module contain opt out of disallow GPP UsNat v2 logic"() { @@ -1496,17 +1546,15 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert exception.responseBody == INVALID_STATUS_MESSAGE where: - disallowGppLogic << [ - new UsNatV2Consent.Builder() - .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.DID_NOT_OPT_OUT) - .build() - ] + disallowGppLogic << [new UsNatV2Consent.Builder() + .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.DID_NOT_OPT_OUT) + .build()] } def "PBS setuid request when privacy module contain invalid GPP segment should respond with valid bidders UIDs cookies"() { @@ -1555,8 +1603,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { and: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + - "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS setuid request when privacy module contain invalid GPP string should respond with valid bidders UIDs cookies"() { @@ -1635,13 +1682,13 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert exception.responseBody == INVALID_STATUS_MESSAGE where: - gppConsent | gppSid + gppConsent | gppSid new UsNatV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_NAT_V1 - new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 - new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 - new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 - new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 - new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 + new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 + new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 + new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 + new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 + new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 } def "PBS setuid request when privacy modules contain allowing settings should respond with valid bidders UIDs cookies"() { @@ -1675,9 +1722,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert response.responseBody where: - accountGppConfig << [ - new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true), + accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true), ] } @@ -1841,10 +1887,10 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS setuid call when privacy regulation match custom requirement should reject bidders with status code invalidStatusCode"() { @@ -1886,14 +1932,14 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert exception.responseBody == INVALID_STATUS_MESSAGE where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS setuid call when custom privacy regulation empty and normalize is disabled should respond with required UIDs cookies"() { @@ -1954,7 +2000,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def setuidRequest = SetuidRequest.defaultSetuidRequest.tap { it.gppSid = gppSid.intValue it.account = accountId - it.gpp = gppStateConsent.build() + it.gpp = gppStateConsent } and: "UIDs cookies" @@ -1990,58 +2036,129 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS cookie sync should process rule when geo doesn't intersection"() { given: "Pbs config with geo location" - def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + - ["geolocation.configurations.geo-info.[0].country": countyConfig, - "geolocation.configurations.geo-info.[0].region" : regionConfig] + def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + ["geolocation.configurations.geo-info.[0].country": countyConfig, + "geolocation.configurations.geo-info.[0].region" : regionConfig] def prebidServerService = pbsServiceFactory.getService(pbsConfig) and: "Cookie sync request with account connection" @@ -2095,9 +2212,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def "PBS setuid should process rule when geo doesn't intersection"() { given: "Pbs config with geo location" - def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + - ["geolocation.configurations.[0].geo-info.country": countyConfig, - "geolocation.configurations.[0].geo-info.region" : regionConfig] + def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + ["geolocation.configurations.[0].geo-info.country": countyConfig, + "geolocation.configurations.[0].geo-info.region" : regionConfig] def prebidServerService = pbsServiceFactory.getService(pbsConfig) and: "Default set uid request" @@ -2154,9 +2270,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def "PBS cookie sync should disallowed rule when device.geo intersection"() { given: "Pbs config with geo location" - def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + - ["geolocation.configurations.[0].geo-info.country": countyConfig, - "geolocation.configurations.[0].geo-info.region" : regionConfig] + def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + ["geolocation.configurations.[0].geo-info.country": countyConfig, + "geolocation.configurations.[0].geo-info.region" : regionConfig] def prebidServerService = pbsServiceFactory.getService(pbsConfig) and: "Cookie sync request with account connection" @@ -2209,9 +2324,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def "PBS setuid should disallowed rule when device.geo intersection"() { given: "Pbs config with geo location" - def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + - ["geolocation.configurations.[0].geo-info.country": countyConfig, - "geolocation.configurations.[0].geo-info.region" : regionConfig] + def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + ["geolocation.configurations.[0].geo-info.country": countyConfig, + "geolocation.configurations.[0].geo-info.region" : regionConfig] def prebidServerService = pbsServiceFactory.getService(pbsConfig) and: "Default set uid request" @@ -2263,9 +2377,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def "PBS cookie sync should fetch geo once when gpp sync user and account require geo look up"() { given: "Pbs config with geo location" - def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + - ["geolocation.configurations.[0].geo-info.country": USA.ISOAlpha3, - "geolocation.configurations.[0].geo-info.region" : ALABAMA.abbreviation] + def pbsConfig = GENERAL_PRIVACY_CONFIG + GEO_LOCATION + ["geolocation.configurations.[0].geo-info.country": USA.ISOAlpha3, + "geolocation.configurations.[0].geo-info.region" : ALABAMA.abbreviation] def prebidServerService = pbsServiceFactory.getService(pbsConfig) and: "Cookie sync request with account connection" @@ -2323,7 +2436,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def cookieSyncRequest = CookieSyncRequest.defaultCookieSyncRequest.tap { it.gppSid = US_NAT_V1.value it.account = accountId - it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for cookie sync with allowing privacy regulation" @@ -2356,7 +2469,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def cookieSyncRequest = CookieSyncRequest.defaultCookieSyncRequest.tap { it.gppSid = US_NAT_V1.value it.account = accountId - it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for cookie sync with allowing privacy regulation" @@ -2408,7 +2521,7 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { def cookieSyncRequest = CookieSyncRequest.defaultCookieSyncRequest.tap { it.gppSid = US_NAT_V1.value it.account = accountId - it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + it.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for cookie sync with allowing privacy regulation" diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy index 4579ea1f7b6..91b29c2bd4d 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy @@ -2,21 +2,17 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule import org.prebid.server.functional.model.config.LogicalRestrictedRule import org.prebid.server.functional.model.db.StoredRequest -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity import org.prebid.server.functional.model.privacy.gpp.MspaMode import org.prebid.server.functional.model.privacy.gpp.Notice import org.prebid.server.functional.model.privacy.gpp.OptOut -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsNationalV1SensitiveData import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.auction.Activity import org.prebid.server.functional.model.request.auction.ActivityRule @@ -33,19 +29,11 @@ import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsNationalV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED -import static org.prebid.server.functional.model.config.DataActivity.CONSENT -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_NOT_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOT_APPLICABLE -import static org.prebid.server.functional.model.config.DataActivity.NO_CONSENT import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 @@ -71,6 +59,9 @@ import static org.prebid.server.functional.model.privacy.Metric.PROCESSED_ACTIVI import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_REQUEST_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.CONSENT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NOT_APPLICABLE +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NO_CONSENT import static org.prebid.server.functional.model.request.GppSectionId.USP_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 @@ -119,8 +110,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: "Activities fields name in different case" activities << [AllowActivities.getDefaultAllowActivities(TRANSMIT_EIDS, Activity.defaultActivity), new AllowActivities().tap { transmitEidsKebabCase = Activity.defaultActivity }, - new AllowActivities().tap { transmitEidsSnakeCase = Activity.defaultActivity }, - ] + new AllowActivities().tap { transmitEidsSnakeCase = Activity.defaultActivity },] } def "PBS auction call when transmit EIDS activities is rejecting requests should remove EIDS fields in request and update disallowed metrics"() { @@ -155,8 +145,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: "Activities fields name in different case" activities << [AllowActivities.getDefaultAllowActivities(TRANSMIT_EIDS, Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)])), new AllowActivities().tap { transmitEidsSnakeCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) }, - new AllowActivities().tap { transmitEidsKebabCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) }, - ] + new AllowActivities().tap { transmitEidsKebabCase = Activity.getDefaultActivity([ActivityRule.getDefaultActivityRule(Condition.baseCondition, false)]) },] } def "PBS auction call when default activity setting set to false should remove EIDS fields from request"() { @@ -205,8 +194,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { then: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "Activity configuration for account ${accountId} " + - "contains conditional rule with empty array").size() == 1 + assert getLogsByText(logs, "Activity configuration for account ${accountId} " + "contains conditional rule with empty array").size() == 1 where: conditions | isAllowed @@ -688,126 +676,114 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - disallowGppLogic << [ - SIMPLE_GPC_DISALLOW_LOGIC, - new UsNatV1Consent.Builder() - .setMspaServiceProviderMode(MspaMode.YES) - .setMspaOptOutOptionMode(MspaMode.NO) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingNotice(Notice.NOT_PROVIDED) - .setSharingOptOutNotice(Notice.PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setSharingNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) - .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) - .build(), - new UsNatV1Consent.Builder() - .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) - .build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.NO_CONSENT, - religiousBeliefs: GppDataActivity.NO_CONSENT, - healthInfo: GppDataActivity.NO_CONSENT, - orientation: GppDataActivity.NO_CONSENT, - citizenshipStatus: GppDataActivity.NO_CONSENT, - unionMembership: GppDataActivity.NO_CONSENT, - )).build(), - new UsNatV1Consent.Builder() - .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build(), - new UsNatV1Consent.Builder() - .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.NO_CONSENT, - biometricId: GppDataActivity.NO_CONSENT, - idNumbers: GppDataActivity.NO_CONSENT, - accountInfo: GppDataActivity.NO_CONSENT, - communicationContents: GppDataActivity.NO_CONSENT - )).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build() - ] + disallowGppLogic << [SIMPLE_GPC_DISALLOW_LOGIC, + new UsNatV1Consent.Builder() + .setMspaServiceProviderMode(MspaMode.YES) + .setMspaOptOutOptionMode(MspaMode.NO) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingNotice(Notice.NOT_PROVIDED) + .setSharingOptOutNotice(Notice.PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setSharingNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) + .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setPersonalDataConsents(CONSENT) + .build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT,)).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT)).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT)).build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT)).build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT)).build()] } def "PBS auction call should remove EIDS fields in request when privacy module contain opt out of disallow GPP UsNat v2 logic"() { @@ -842,20 +818,18 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { !genericBidderRequest.user?.ext?.eids } where: - disallowGppLogic << [ - new UsNatV2Consent.Builder() - .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.OPTED_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) - .build() - ] + disallowGppLogic << [new UsNatV2Consent.Builder() + .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.OPTED_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) + .build()] } def "PBS auction call shouldn't remove EIDS fields in request and emit error log when privacy module contain invalid GPP segment"() { @@ -907,8 +881,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { and: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + - "'${INVALID_GPP_SEGMENT}'. Activity: TRANSMIT_EIDS. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: TRANSMIT_EIDS. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS auction call when privacy module contain invalid GPP string shouldn't remove EIDS fields in request and emit warning in response"() { @@ -989,13 +962,13 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | gppSid + gppConsent | gppSid new UsNatV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_NAT_V1 - new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 - new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 - new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 - new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 - new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 + new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 + new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 + new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 + new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 + new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 } def "PBS auction call when privacy modules contain allowing settings should leave EIDS fields in request"() { @@ -1025,10 +998,8 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { assert genericBidderRequest.user.eids[0].source == bidRequest.user.eids[0].source where: - accountGppConfig << [ - new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) - ] + accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] } def "PBS auction call when regs.gpp in request is allowing should leave EIDS fields in request"() { @@ -1182,10 +1153,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS auction call when privacy regulation match custom requirement should remove EIDS fields in request"() { @@ -1225,14 +1196,14 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should leave EIDS fields in request and emit error log"() { @@ -1297,7 +1268,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { def bidRequest = getBidRequestWithPersonalData(accountId).tap { ext.prebid.trace = VERBOSE regs.gppSid = [gppSid.intValue] - regs.gpp = gppStateConsent.build() + regs.gpp = gppStateConsent } and: "Activities set with privacy regulation" @@ -1332,51 +1303,123 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS amp call when transmit EIDS activities is allowing request should leave EIDS fields field in active request and update proper metrics"() { @@ -1520,8 +1563,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { then: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "Activity configuration for account ${accountId} " + - "contains conditional rule with empty array").size() == 1 + assert getLogsByText(logs, "Activity configuration for account ${accountId} " + "contains conditional rule with empty array").size() == 1 where: conditions | isAllowed @@ -1777,126 +1819,114 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - disallowGppLogic << [ - SIMPLE_GPC_DISALLOW_LOGIC, - new UsNatV1Consent.Builder() - .setMspaServiceProviderMode(MspaMode.YES) - .setMspaOptOutOptionMode(MspaMode.NO) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSaleOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingNotice(Notice.NOT_PROVIDED) - .setSharingOptOutNotice(Notice.PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .setSharingOptOut(OptOut.OPTED_OUT) - .setSharingNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) - .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) - .setSaleOptOut(OptOut.OPTED_OUT) - .setSaleOptOutNotice(Notice.PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) - .build(), - new UsNatV1Consent.Builder() - .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) - .setMspaServiceProviderMode(MspaMode.NO) - .setMspaOptOutOptionMode(MspaMode.YES) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) - .build(), - new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) - .build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.NO_CONSENT, - religiousBeliefs: GppDataActivity.NO_CONSENT, - healthInfo: GppDataActivity.NO_CONSENT, - orientation: GppDataActivity.NO_CONSENT, - citizenshipStatus: GppDataActivity.NO_CONSENT, - unionMembership: GppDataActivity.NO_CONSENT, - )).build(), - new UsNatV1Consent.Builder() - .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build(), - new UsNatV1Consent.Builder() - .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.NO_CONSENT, - biometricId: GppDataActivity.NO_CONSENT, - idNumbers: GppDataActivity.NO_CONSENT, - accountInfo: GppDataActivity.NO_CONSENT, - communicationContents: GppDataActivity.NO_CONSENT - )).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT - )).build() - ] + disallowGppLogic << [SIMPLE_GPC_DISALLOW_LOGIC, + new UsNatV1Consent.Builder() + .setMspaServiceProviderMode(MspaMode.YES) + .setMspaOptOutOptionMode(MspaMode.NO) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSaleOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingNotice(Notice.NOT_PROVIDED) + .setSharingOptOutNotice(Notice.PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .setSharingOptOut(OptOut.OPTED_OUT) + .setSharingNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOutNotice(Notice.NOT_PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setTargetedAdvertisingOptOut(OptOut.OPTED_OUT) + .setTargetedAdvertisingOptOutNotice(Notice.PROVIDED) + .setSaleOptOut(OptOut.OPTED_OUT) + .setSaleOptOutNotice(Notice.PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) + .setMspaServiceProviderMode(MspaMode.NO) + .setMspaOptOutOptionMode(MspaMode.YES) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) + .build(), + new UsNatV1Consent.Builder() + .setPersonalDataConsents(CONSENT) + .build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT,)).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT)).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT)).build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT)).build(), + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT)).build()] } def "PBS amp call should remove EIDS fields in request when privacy module contain opt out of disallow GPP UsNat v2 logic"() { @@ -1940,20 +1970,18 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { !genericBidderRequest.user?.ext?.eids } where: - disallowGppLogic << [ - new UsNatV2Consent.Builder() - .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOutNotice(Notice.NOT_PROVIDED) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.OPTED_OUT) - .build(), - new UsNatV2Consent.Builder() - .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) - .build() - ] + disallowGppLogic << [new UsNatV2Consent.Builder() + .setSaleOptOut(OptOut.DID_NOT_OPT_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOutNotice(Notice.NOT_PROVIDED) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.OPTED_OUT) + .build(), + new UsNatV2Consent.Builder() + .setSharingOptOut(OptOut.DID_NOT_OPT_OUT) + .build()] } def "PBS amp call when privacy module contain invalid GPP segment shouldn't remove EIDS fields in request and emit error log"() { @@ -2013,8 +2041,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { "Response should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + - "'${INVALID_GPP_SEGMENT}'. Activity: TRANSMIT_EIDS. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: TRANSMIT_EIDS. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS amp call when privacy module contain invalid GPP string shouldn't remove EIDS fields in request and emit warning in response"() { @@ -2112,13 +2139,13 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | gppSid + gppConsent | gppSid new UsNatV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_NAT_V1 - new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 - new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 - new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 - new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 - new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 + new UsCaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CA_V1 + new UsVaV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_VA_V1 + new UsCoV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CO_V1 + new UsUtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_UT_V1 + new UsCtV1Consent.Builder().setMspaServiceProviderMode(MspaMode.YES).setMspaOptOutOptionMode(MspaMode.NO).build() | US_CT_V1 } def "PBS amp call when privacy modules contain allowing settings should leave EIDS fields in request"() { @@ -2157,10 +2184,8 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { assert genericBidderRequest.user.eids[0].source == ampStoredRequest.user.eids[0].source where: - accountGppConfig << [ - new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) - ] + accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] } def "PBS amp call when regs.gpp empty in request should leave EIDS fields in request"() { @@ -2398,10 +2423,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS amp call when privacy regulation match custom requirement should remove EIDS fields from request"() { @@ -2450,14 +2475,14 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should leave EIDS fields in request and emit error log"() { @@ -2533,7 +2558,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { def ampRequest = AmpRequest.defaultAmpRequest.tap { it.account = accountId it.gppSid = gppSid.intValue - it.consentString = gppStateConsent.build() + it.consentString = gppStateConsent it.consentType = GPP } @@ -2576,51 +2601,123 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS should remove EIDS fields in request when privacy regulation match and personalDataConsents is 2"() { @@ -2628,7 +2725,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitEIDS with rejecting privacy regulation" @@ -2659,7 +2756,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitEIDS with rejecting privacy regulation" @@ -2708,7 +2805,7 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitEIDS with rejecting privacy regulation" diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy index 9fd6b76e054..c1d449e43bc 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy @@ -2,21 +2,17 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule import org.prebid.server.functional.model.config.LogicalRestrictedRule import org.prebid.server.functional.model.db.StoredRequest -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity import org.prebid.server.functional.model.privacy.gpp.MspaMode import org.prebid.server.functional.model.privacy.gpp.Notice -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsNationalV1SensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.auction.Activity import org.prebid.server.functional.model.request.auction.ActivityRule @@ -32,19 +28,11 @@ import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsNationalV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED -import static org.prebid.server.functional.model.config.DataActivity.CONSENT -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_NOT_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOT_APPLICABLE -import static org.prebid.server.functional.model.config.DataActivity.NO_CONSENT import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 @@ -65,11 +53,14 @@ import static org.prebid.server.functional.model.config.UsNationalPrivacySection import static org.prebid.server.functional.model.config.UsNationalPrivacySection.SHARING_NOTICE import static org.prebid.server.functional.model.pricefloors.Country.CAN import static org.prebid.server.functional.model.pricefloors.Country.USA -import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.ACCOUNT_PROCESSED_RULES_COUNT -import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.PROCESSED_ACTIVITY_RULES_COUNT +import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_REQUEST_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.CONSENT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NOT_APPLICABLE +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NO_CONSENT import static org.prebid.server.functional.model.request.GppSectionId.USP_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 @@ -1115,16 +1106,16 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) + .setPersonalDataConsents(CONSENT) .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) @@ -1134,17 +1125,17 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.CONSENT + geolocation: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.CONSENT + geolocation: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.NO_CONSENT + geolocation: NO_CONSENT )).build() ] } @@ -1208,9 +1199,9 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: usNationalV2ChildSensitiveData << [ - new UsNationalV2ChildSensitiveData(childUnder13: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom13to16: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom16to17: GppDataActivity.NO_CONSENT) + new UsNationalV2ChildSensitiveData(childUnder13: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom13to16: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom16to17: NO_CONSENT) ] } @@ -1539,10 +1530,10 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS auction call when privacy regulation match custom requirement should round lat/lon data to 2 digits"() { @@ -1607,13 +1598,13 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should not round lat/lon data and emit error log"() { @@ -1696,7 +1687,7 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { def bidRequest = bidRequestWithGeo.tap { ext.prebid.trace = VERBOSE regs.gppSid = [gppSid.intValue] - regs.gpp = gppStateConsent.build() + regs.gpp = gppStateConsent setAccountId(accountId) } @@ -1757,51 +1748,123 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS amp call with bidder allowed in activities should not round lat/lon data and update processed metrics"() { @@ -2422,16 +2485,16 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { .setSensitiveDataProcessingOptOutNotice(Notice.NOT_PROVIDED) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) + .setPersonalDataConsents(CONSENT) .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_PROVIDED) @@ -2441,17 +2504,17 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.CONSENT + geolocation: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.CONSENT + geolocation: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: GppDataActivity.NO_CONSENT + geolocation: NO_CONSENT )).build() ] } @@ -2828,10 +2891,10 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS amp call when privacy regulation match custom requirement should round lat/lon data to 2 digits"() { @@ -2906,13 +2969,13 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should not round lat/lon data and emit error log"() { @@ -3007,7 +3070,7 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { def ampRequest = AmpRequest.defaultAmpRequest.tap { it.account = accountId it.gppSid = gppSid.intValue - it.consentString = gppStateConsent.build() + it.consentString = gppStateConsent it.consentType = GPP } @@ -3072,51 +3135,123 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS auction should round lat/lon data to 2 digits call when privacy regulation match and personalDataConsents is 2"() { @@ -3125,7 +3260,7 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { def bidRequest = bidRequestWithGeo.tap { it.setAccountId(accountId) regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitPreciseGeo with rejecting privacy regulation" @@ -3181,7 +3316,7 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { def bidRequest = bidRequestWithGeo.tap { it.setAccountId(accountId) regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitPreciseGeo with rejecting privacy regulation" @@ -3255,7 +3390,7 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { def bidRequest = bidRequestWithGeo.tap { it.setAccountId(accountId) regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitPreciseGeo with rejecting privacy regulation" diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy index 3af8bfe4d77..3ba13f2b596 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy @@ -3,6 +3,7 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGdprConfig import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -11,18 +12,12 @@ import org.prebid.server.functional.model.config.Purpose import org.prebid.server.functional.model.config.PurposeConfig import org.prebid.server.functional.model.config.PurposeEid import org.prebid.server.functional.model.db.StoredRequest -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity import org.prebid.server.functional.model.privacy.gpp.MspaMode import org.prebid.server.functional.model.privacy.gpp.Notice import org.prebid.server.functional.model.privacy.gpp.OptOut -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV1ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2ChildSensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV2SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.auction.Activity import org.prebid.server.functional.model.request.auction.ActivityRule @@ -39,19 +34,12 @@ import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent -import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData import org.prebid.server.functional.model.privacy.gpp.UsNationalV1SensitiveData -import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED -import static org.prebid.server.functional.model.config.DataActivity.CONSENT -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_NOT_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOTICE_PROVIDED -import static org.prebid.server.functional.model.config.DataActivity.NOT_APPLICABLE -import static org.prebid.server.functional.model.config.DataActivity.NO_CONSENT import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 @@ -77,6 +65,9 @@ import static org.prebid.server.functional.model.privacy.Metric.PROCESSED_ACTIVI import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ACCOUNT_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_ADAPTER_DISALLOWED_COUNT import static org.prebid.server.functional.model.privacy.Metric.TEMPLATE_REQUEST_DISALLOWED_COUNT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.CONSENT +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NOT_APPLICABLE +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.NO_CONSENT import static org.prebid.server.functional.model.request.GppSectionId.USP_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 @@ -997,68 +988,68 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { .setMspaOptOutOptionMode(MspaMode.YES) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) + .setPersonalDataConsents(CONSENT) .build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.NO_CONSENT, - religiousBeliefs: GppDataActivity.NO_CONSENT, - healthInfo: GppDataActivity.NO_CONSENT, - orientation: GppDataActivity.NO_CONSENT, - citizenshipStatus: GppDataActivity.NO_CONSENT, - unionMembership: GppDataActivity.NO_CONSENT, + racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT, )).build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT )).build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.NO_CONSENT, - biometricId: GppDataActivity.NO_CONSENT, - idNumbers: GppDataActivity.NO_CONSENT, - accountInfo: GppDataActivity.NO_CONSENT, - communicationContents: GppDataActivity.NO_CONSENT + geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT )).build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT )).build() ] } @@ -1178,38 +1169,38 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: usNationalV2SensitiveData << [ - new UsNationalV2SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(religiousBeliefs: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(healthInfo: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(orientation: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(citizenshipStatus: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(geneticId: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(biometricId: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(idNumbers: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(accountInfo: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(unionMembership: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(communicationContents: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(consumerHealthData: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(crimeVictim: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(nationalOrigin: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(transgenderStatus: GppDataActivity.CONSENT), - - new UsNationalV2SensitiveData(racialEthnicOrigin: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(religiousBeliefs: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(healthInfo: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(orientation: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(citizenshipStatus: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(unionMembership: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(consumerHealthData: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(nationalOrigin: GppDataActivity.NO_CONSENT), - - new UsNationalV2SensitiveData(geneticId: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(biometricId: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(idNumbers: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(accountInfo: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(communicationContents: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(crimeVictim: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(transgenderStatus: GppDataActivity.NO_CONSENT) + new UsNationalV2SensitiveData(racialEthnicOrigin: CONSENT), + new UsNationalV2SensitiveData(religiousBeliefs: CONSENT), + new UsNationalV2SensitiveData(healthInfo: CONSENT), + new UsNationalV2SensitiveData(orientation: CONSENT), + new UsNationalV2SensitiveData(citizenshipStatus: CONSENT), + new UsNationalV2SensitiveData(geneticId: CONSENT), + new UsNationalV2SensitiveData(biometricId: CONSENT), + new UsNationalV2SensitiveData(idNumbers: CONSENT), + new UsNationalV2SensitiveData(accountInfo: CONSENT), + new UsNationalV2SensitiveData(unionMembership: CONSENT), + new UsNationalV2SensitiveData(communicationContents: CONSENT), + new UsNationalV2SensitiveData(consumerHealthData: CONSENT), + new UsNationalV2SensitiveData(crimeVictim: CONSENT), + new UsNationalV2SensitiveData(nationalOrigin: CONSENT), + new UsNationalV2SensitiveData(transgenderStatus: CONSENT), + + new UsNationalV2SensitiveData(racialEthnicOrigin: NO_CONSENT), + new UsNationalV2SensitiveData(religiousBeliefs: NO_CONSENT), + new UsNationalV2SensitiveData(healthInfo: NO_CONSENT), + new UsNationalV2SensitiveData(orientation: NO_CONSENT), + new UsNationalV2SensitiveData(citizenshipStatus: NO_CONSENT), + new UsNationalV2SensitiveData(unionMembership: NO_CONSENT), + new UsNationalV2SensitiveData(consumerHealthData: NO_CONSENT), + new UsNationalV2SensitiveData(nationalOrigin: NO_CONSENT), + + new UsNationalV2SensitiveData(geneticId: NO_CONSENT), + new UsNationalV2SensitiveData(biometricId: NO_CONSENT), + new UsNationalV2SensitiveData(idNumbers: NO_CONSENT), + new UsNationalV2SensitiveData(accountInfo: NO_CONSENT), + new UsNationalV2SensitiveData(communicationContents: NO_CONSENT), + new UsNationalV2SensitiveData(crimeVictim: NO_CONSENT), + new UsNationalV2SensitiveData(transgenderStatus: NO_CONSENT) ] } @@ -1263,9 +1254,9 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: usNationalV2ChildSensitiveData << [ - new UsNationalV2ChildSensitiveData(childUnder13: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom13to16: GppDataActivity.NO_CONSENT), - new UsNationalV2ChildSensitiveData(childFrom16to17: GppDataActivity.NO_CONSENT) + new UsNationalV2ChildSensitiveData(childUnder13: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom13to16: NO_CONSENT), + new UsNationalV2ChildSensitiveData(childFrom16to17: NO_CONSENT) ] } @@ -1724,10 +1715,10 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS auction call when privacy regulation match custom requirement should remove UFPD fields in request"() { @@ -1782,14 +1773,14 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { assert bidderRequest.user.eids == bidRequest.user.eids where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should leave UFPD fields in request and emit error log"() { @@ -1874,7 +1865,7 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { def bidRequest = getBidRequestWithPersonalData(accountId).tap { ext.prebid.trace = VERBOSE regs.gppSid = [gppSid.intValue] - regs.gpp = gppStateConsent.build() + regs.gpp = gppStateConsent } and: "Activities set with privacy regulation" @@ -1924,51 +1915,123 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS amp call when transmit UFPD activities is allowing request should leave UFPD fields field in active request and update proper metrics"() { @@ -2521,38 +2584,38 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: usNationalV2SensitiveData << [ - new UsNationalV2SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(religiousBeliefs: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(healthInfo: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(orientation: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(citizenshipStatus: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(geneticId: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(biometricId: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(idNumbers: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(accountInfo: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(unionMembership: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(communicationContents: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(consumerHealthData: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(crimeVictim: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(nationalOrigin: GppDataActivity.CONSENT), - new UsNationalV2SensitiveData(transgenderStatus: GppDataActivity.CONSENT), - - new UsNationalV2SensitiveData(racialEthnicOrigin: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(religiousBeliefs: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(healthInfo: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(orientation: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(citizenshipStatus: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(unionMembership: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(consumerHealthData: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(nationalOrigin: GppDataActivity.NO_CONSENT), - - new UsNationalV2SensitiveData(geneticId: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(biometricId: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(idNumbers: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(accountInfo: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(communicationContents: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(crimeVictim: GppDataActivity.NO_CONSENT), - new UsNationalV2SensitiveData(transgenderStatus: GppDataActivity.NO_CONSENT) + new UsNationalV2SensitiveData(racialEthnicOrigin: CONSENT), + new UsNationalV2SensitiveData(religiousBeliefs: CONSENT), + new UsNationalV2SensitiveData(healthInfo: CONSENT), + new UsNationalV2SensitiveData(orientation: CONSENT), + new UsNationalV2SensitiveData(citizenshipStatus: CONSENT), + new UsNationalV2SensitiveData(geneticId: CONSENT), + new UsNationalV2SensitiveData(biometricId: CONSENT), + new UsNationalV2SensitiveData(idNumbers: CONSENT), + new UsNationalV2SensitiveData(accountInfo: CONSENT), + new UsNationalV2SensitiveData(unionMembership: CONSENT), + new UsNationalV2SensitiveData(communicationContents: CONSENT), + new UsNationalV2SensitiveData(consumerHealthData: CONSENT), + new UsNationalV2SensitiveData(crimeVictim: CONSENT), + new UsNationalV2SensitiveData(nationalOrigin: CONSENT), + new UsNationalV2SensitiveData(transgenderStatus: CONSENT), + + new UsNationalV2SensitiveData(racialEthnicOrigin: NO_CONSENT), + new UsNationalV2SensitiveData(religiousBeliefs: NO_CONSENT), + new UsNationalV2SensitiveData(healthInfo: NO_CONSENT), + new UsNationalV2SensitiveData(orientation: NO_CONSENT), + new UsNationalV2SensitiveData(citizenshipStatus: NO_CONSENT), + new UsNationalV2SensitiveData(unionMembership: NO_CONSENT), + new UsNationalV2SensitiveData(consumerHealthData: NO_CONSENT), + new UsNationalV2SensitiveData(nationalOrigin: NO_CONSENT), + + new UsNationalV2SensitiveData(geneticId: NO_CONSENT), + new UsNationalV2SensitiveData(biometricId: NO_CONSENT), + new UsNationalV2SensitiveData(idNumbers: NO_CONSENT), + new UsNationalV2SensitiveData(accountInfo: NO_CONSENT), + new UsNationalV2SensitiveData(communicationContents: NO_CONSENT), + new UsNationalV2SensitiveData(crimeVictim: NO_CONSENT), + new UsNationalV2SensitiveData(transgenderStatus: NO_CONSENT) ] } @@ -2669,68 +2732,68 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { .setMspaOptOutOptionMode(MspaMode.YES) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NOT_APPLICABLE, GppDataActivity.NO_CONSENT)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NOT_APPLICABLE, NO_CONSENT)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(GppDataActivity.NO_CONSENT, GppDataActivity.NOT_APPLICABLE)) + .setKnownChildSensitiveDataConsents(UsNationalV1ChildSensitiveData.getDefault(NO_CONSENT, NOT_APPLICABLE)) .build(), new UsNatV1Consent.Builder() - .setPersonalDataConsents(GppDataActivity.CONSENT) + .setPersonalDataConsents(CONSENT) .build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.NO_CONSENT, - religiousBeliefs: GppDataActivity.NO_CONSENT, - healthInfo: GppDataActivity.NO_CONSENT, - orientation: GppDataActivity.NO_CONSENT, - citizenshipStatus: GppDataActivity.NO_CONSENT, - unionMembership: GppDataActivity.NO_CONSENT, + racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT, )).build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT )).build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: GppDataActivity.CONSENT, - religiousBeliefs: GppDataActivity.CONSENT, - healthInfo: GppDataActivity.CONSENT, - orientation: GppDataActivity.CONSENT, - citizenshipStatus: GppDataActivity.CONSENT, - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - unionMembership: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + racialEthnicOrigin: CONSENT, + religiousBeliefs: CONSENT, + healthInfo: CONSENT, + orientation: CONSENT, + citizenshipStatus: CONSENT, + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + unionMembership: CONSENT, + communicationContents: CONSENT )).build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.NO_CONSENT, - biometricId: GppDataActivity.NO_CONSENT, - idNumbers: GppDataActivity.NO_CONSENT, - accountInfo: GppDataActivity.NO_CONSENT, - communicationContents: GppDataActivity.NO_CONSENT + geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT )).build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geneticId: GppDataActivity.CONSENT, - biometricId: GppDataActivity.CONSENT, - idNumbers: GppDataActivity.CONSENT, - accountInfo: GppDataActivity.CONSENT, - communicationContents: GppDataActivity.CONSENT + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT )).build() ] } @@ -3396,10 +3459,10 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) } def "PBS amp call when privacy regulation match custom requirement should remove UFPD fields from request"() { @@ -3463,14 +3526,14 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { assert bidderRequest.user.eids == ampStoredRequest.user.eids where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() | [new EqualityValueRule(GPC, NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should leave UFPD fields in request and emit error log"() { @@ -3564,7 +3627,7 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { def ampRequest = AmpRequest.defaultAmpRequest.tap { it.account = accountId it.gppSid = gppSid.intValue - it.consentString = gppStateConsent.build() + it.consentString = gppStateConsent it.consentType = GPP } @@ -3622,51 +3685,123 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gppSid | equalityValueRules | gppStateConsent - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(idNumbers: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(accountInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geolocation: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(communicationContents: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsCaV1Consent.Builder().setSensitiveDataProcessing(new UsCaliforniaV1SensitiveData(orientation: GppDataActivity.CONSENT)) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ID_NUMBERS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [idNumbers: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ACCOUNT_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [accountInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geolocation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_CA_V1, [racialEthnicOrigin: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_COMMUNICATION_CONTENTS, CONSENT)] | generateSensitiveGpp(US_CA_V1, [communicationContents: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [geneticId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_CA_V1, [biometricId: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_CA_V1, [healthInfo: CONSENT]) + US_CA_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_CA_V1, [orientation: CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [NO_CONSENT, CONSENT]) US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, NO_CONSENT]) + US_CA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [NO_CONSENT, CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, NO_CONSENT]) + US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_VA_V1, [CONSENT, CONSENT]) US_VA_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsVaV1Consent.Builder().setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_VA_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [NO_CONSENT, CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, NO_CONSENT]) + US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CO_V1, [CONSENT, CONSENT]) US_CO_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCoV1Consent.Builder().setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.default) - - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(racialEthnicOrigin: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(religiousBeliefs: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(orientation: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(citizenshipStatus: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(healthInfo: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geneticId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(biometricId: GppDataActivity.CONSENT)) - US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | new UsUtV1Consent.Builder().setSensitiveDataProcessing(new UsUtahV1SensitiveData(geolocation: GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CO_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) + + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RACIAL_ETHNIC_ORIGIN, CONSENT)] | generateSensitiveGpp(US_UT_V1, [racialEthnicOrigin: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_RELIGIOUS_BELIEFS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [religiousBeliefs: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_ORIENTATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [orientation: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_CITIZENSHIP_STATUS, CONSENT)] | generateSensitiveGpp(US_UT_V1, [citizenshipStatus: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_HEALTH_INFO, CONSENT)] | generateSensitiveGpp(US_UT_V1, [healthInfo: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GENETIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geneticId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_BIOMETRIC_ID, CONSENT)] | generateSensitiveGpp(US_UT_V1, [biometricId: CONSENT]) + US_UT_V1 | [new EqualityValueRule(SENSITIVE_DATA_GEOLOCATION, CONSENT)] | generateSensitiveGpp(US_UT_V1, [geolocation: CONSENT]) + + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, NO_CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [NO_CONSENT, CONSENT]) + US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, NO_CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getRandom([GppDataActivity.NOT_APPLICABLE])) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_UT_V1, [CONSENT, CONSENT]) US_UT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsUtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_UT_V1, [NOT_APPLICABLE, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NOT_APPLICABLE), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.default) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NOT_APPLICABLE)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NOT_APPLICABLE, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, NO_CONSENT, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [NO_CONSENT, CONSENT, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, NO_CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NOT_APPLICABLE, CONSENT]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NOT_APPLICABLE]) + US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, NO_CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(GppDataActivity.CONSENT, GppDataActivity.NOT_APPLICABLE, GppDataActivity.CONSENT)) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, NO_CONSENT, CONSENT]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom16to18 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NOT_APPLICABLE]) US_CT_V1 | [new EqualityValueRule(CHILD_CONSENTS_BELOW_13, NO_CONSENT), - new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | new UsCtV1Consent.Builder().setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getRandom().tap { it.childFrom13to16 = GppDataActivity.NO_CONSENT }) + new EqualityValueRule(CHILD_CONSENTS_FROM_13_TO_16, NO_CONSENT)] | generateChildSensitiveGpp(US_CT_V1, [CONSENT, CONSENT, NO_CONSENT]) } def "PBS auction call when transmit UFPD activities is rejecting requests with activityTransition false should remove only UFPD fields in request"() { @@ -3729,7 +3864,7 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitUfpd with rejecting privacy regulation" @@ -3777,7 +3912,7 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitUfpd with rejecting privacy regulation" @@ -3843,7 +3978,7 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { def accountId = PBSUtils.randomNumber as String def bidRequest = getBidRequestWithPersonalData(accountId).tap { regs.gppSid = [US_NAT_V1.intValue] - regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(GppDataActivity.CONSENT).build() + regs.gpp = new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() } and: "Activities set for transmitUfpd with rejecting privacy regulation" diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy index 34756f703ca..793e3cfe0c0 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy @@ -12,6 +12,18 @@ import org.prebid.server.functional.model.config.Purpose import org.prebid.server.functional.model.db.Account import org.prebid.server.functional.model.mock.services.vendorlist.VendorListResponse import org.prebid.server.functional.model.privacy.EnforcementRequirement +import org.prebid.server.functional.model.privacy.gpp.GppDataActivity +import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsCaliforniaV1SensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsColoradoV1SensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsConnecticutV1SensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsUtahV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsUtahV1SensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1ChildSensitiveData +import org.prebid.server.functional.model.privacy.gpp.UsVirginiaV1SensitiveData +import org.prebid.server.functional.model.request.GppSectionId import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.amp.ConsentType import org.prebid.server.functional.model.request.auction.AllowActivities @@ -33,7 +45,12 @@ import org.prebid.server.functional.util.PBSUtils import org.prebid.server.functional.util.privacy.ConsentString import org.prebid.server.functional.util.privacy.TcfConsent import org.prebid.server.functional.util.privacy.gpp.GppConsent +import org.prebid.server.functional.util.privacy.gpp.v1.UsCaV1Consent +import org.prebid.server.functional.util.privacy.gpp.v1.UsCoV1Consent +import org.prebid.server.functional.util.privacy.gpp.v1.UsCtV1Consent import org.prebid.server.functional.util.privacy.gpp.v1.UsNatV1Consent +import org.prebid.server.functional.util.privacy.gpp.v1.UsUtV1Consent +import org.prebid.server.functional.util.privacy.gpp.v1.UsVaV1Consent import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.model.bidder.BidderName.OPENX @@ -43,6 +60,11 @@ import static org.prebid.server.functional.model.config.PurposeEnforcement.NO import static org.prebid.server.functional.model.mock.services.vendorlist.VendorListResponse.getDefaultVendorListResponse import static org.prebid.server.functional.model.pricefloors.Country.USA import static org.prebid.server.functional.model.pricefloors.Country.BULGARIA +import static org.prebid.server.functional.model.request.GppSectionId.US_CA_V1 +import static org.prebid.server.functional.model.request.GppSectionId.US_CO_V1 +import static org.prebid.server.functional.model.request.GppSectionId.US_CT_V1 +import static org.prebid.server.functional.model.request.GppSectionId.US_UT_V1 +import static org.prebid.server.functional.model.request.GppSectionId.US_VA_V1 import static org.prebid.server.functional.model.request.amp.ConsentType.GPP import static org.prebid.server.functional.model.request.amp.ConsentType.TCF_2 import static org.prebid.server.functional.model.request.amp.ConsentType.US_PRIVACY @@ -561,6 +583,79 @@ abstract class PrivacyBaseSpec extends BaseSpec { enforceVendor: false)] } + protected static String generateSensitiveGpp(GppSectionId sectionId, Map fieldsMap) { + def sensitiveData + def consentBuilder + + switch (sectionId) { + case US_CA_V1: + sensitiveData = new UsCaliforniaV1SensitiveData() + consentBuilder = new UsCaV1Consent.Builder() + break + case US_VA_V1: + sensitiveData = new UsVirginiaV1SensitiveData() + consentBuilder = new UsVaV1Consent.Builder() + break + case US_CO_V1: + sensitiveData = new UsColoradoV1SensitiveData() + consentBuilder = new UsCoV1Consent.Builder() + break + case US_UT_V1: + sensitiveData = new UsUtahV1SensitiveData() + consentBuilder = new UsUtV1Consent.Builder() + break + case US_CT_V1: + sensitiveData = new UsConnecticutV1SensitiveData() + consentBuilder = new UsCtV1Consent.Builder() + break + default: + throw new IllegalArgumentException("Unsupported Section ID for Sensitive Data: $sectionId") + } + + fieldsMap.each { fieldName, value -> + sensitiveData.setProperty("$fieldName", value) + } + + consentBuilder.setSensitiveDataProcessing(sensitiveData).build().toString() + } + + protected static String generateChildSensitiveGpp(GppSectionId sectionId, List fields) { + def childSensitiveData + def consentBuilder + + switch (sectionId) { + case US_CA_V1: + childSensitiveData = UsCaliforniaV1ChildSensitiveData.getDefault(*fields) + consentBuilder = new UsCaV1Consent.Builder() + break + + case US_VA_V1: + childSensitiveData = UsVirginiaV1ChildSensitiveData.getDefault(fields.first) + consentBuilder = new UsVaV1Consent.Builder() + break + + case US_CO_V1: + childSensitiveData = UsColoradoV1ChildSensitiveData.getDefault(fields.first) + consentBuilder = new UsCoV1Consent.Builder() + break + + case US_UT_V1: + childSensitiveData = UsUtahV1ChildSensitiveData.getDefault(fields.first) + consentBuilder = new UsUtV1Consent.Builder() + break + + case US_CT_V1: + childSensitiveData = UsConnecticutV1ChildSensitiveData.getDefault(*fields) + consentBuilder = new UsCtV1Consent.Builder() + break + + default: + throw new IllegalArgumentException("Unsupported Section ID for Child Data: $sectionId") + } + + consentBuilder.setKnownChildSensitiveDataConsents(childSensitiveData).build().toString() + } + protected static List getFullTcfCompanyEnforcementRequirementsRandomlyWithExcludePurpose(Purpose purpose) { getFullTcfCompanyEnforcementRequirements(purpose, true) } From 11997ca2d26805341b14017a14fcff3444f7cf79 Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Thu, 4 Dec 2025 14:28:53 +0200 Subject: [PATCH 2/6] remove empty lines --- .../model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy index 8439b3eb86e..2bc1f03458c 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy @@ -7,8 +7,6 @@ class UsCaliforniaV1ChildSensitiveData { GppDataActivity toSellUnder16 GppDataActivity toShareUnder16 - - static UsCaliforniaV1ChildSensitiveData getDefault(GppDataActivity childUnder13 = GppDataActivity.NOT_APPLICABLE, GppDataActivity childFrom13to16 = GppDataActivity.NOT_APPLICABLE) { From f208473170e6c97aaf0712cbb3c26b5279e8b1ab Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Fri, 5 Dec 2025 13:57:54 +0200 Subject: [PATCH 3/6] update after review --- .../model/config/ActivityConfig.groovy | 2 +- .../model/config/DataActivity.groovy | 42 ----- .../model/config/EqualityValueRule.groovy | 8 +- .../model/config/GppModuleConfig.groovy | 27 +-- .../model/config/InequalityValueRule.groovy | 5 +- .../model/config/ValueRestrictedRule.groovy | 9 +- .../model/privacy/gpp/GppDataActivity.groovy | 6 + .../UsCaliforniaV1ChildSensitiveData.groovy | 9 - .../gpp/UsColoradoV1ChildSensitiveData.groovy | 6 - .../UsConnecticutV1ChildSensitiveData.groovy | 8 - .../gpp/UsNationalV1ChildSensitiveData.groovy | 7 - .../gpp/UsNationalV2ChildSensitiveData.groovy | 8 - .../gpp/UsUtahV1ChildSensitiveData.groovy | 6 - .../gpp/UsVirginiaV1ChildSensitiveData.groovy | 6 - .../privacy/GppFetchBidActivitiesSpec.groovy | 65 ++++---- .../privacy/GppSyncUserActivitiesSpec.groovy | 63 +++---- .../GppTransmitEidsActivitiesSpec.groovy | 154 +++++++++++------- ...GppTransmitPreciseGeoActivitiesSpec.groovy | 79 ++++----- .../GppTransmitUfpdActivitiesSpec.groovy | 78 ++++----- .../tests/privacy/PrivacyBaseSpec.groovy | 8 +- 20 files changed, 267 insertions(+), 329 deletions(-) delete mode 100644 src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy diff --git a/src/test/groovy/org/prebid/server/functional/model/config/ActivityConfig.groovy b/src/test/groovy/org/prebid/server/functional/model/config/ActivityConfig.groovy index 14f19d03331..fbd7ba4b81b 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/ActivityConfig.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/ActivityConfig.groovy @@ -3,9 +3,9 @@ package org.prebid.server.functional.model.config import groovy.transform.ToString import org.prebid.server.functional.model.request.auction.ActivityType -import static org.prebid.server.functional.model.config.DataActivity.INVALID import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.GPC +import static org.prebid.server.functional.model.privacy.gpp.GppDataActivity.INVALID @ToString(includeNames = true, ignoreNulls = true) class ActivityConfig { diff --git a/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy b/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy deleted file mode 100644 index 18ece88a4c9..00000000000 --- a/src/test/groovy/org/prebid/server/functional/model/config/DataActivity.groovy +++ /dev/null @@ -1,42 +0,0 @@ -package org.prebid.server.functional.model.config - -import com.fasterxml.jackson.annotation.JsonValue -import org.prebid.server.functional.model.privacy.gpp.GppDataActivity - -enum DataActivity { - - NOT_APPLICABLE(0), - NOTICE_PROVIDED(1), - NOTICE_NOT_PROVIDED(2), - NO_CONSENT(1), - CONSENT(2), - INVALID(-1) - - static DataActivity fromGppDataActivity(GppDataActivity gppActivity) { - if (gppActivity == null) { - return INVALID; - } - switch (gppActivity) { - case GppDataActivity.NOT_APPLICABLE: - return NOT_APPLICABLE - case GppDataActivity.NO_CONSENT: - return NO_CONSENT - case GppDataActivity.CONSENT: - return CONSENT - default: - return INVALID - } - } - - @JsonValue - final int dataActivityBits - - DataActivity(int dataActivityBits) { - this.dataActivityBits = dataActivityBits - } - - static DataActivity fromInt(int dataActivityBits) { - values().find { it.dataActivityBits == dataActivityBits } - ?: { throw new IllegalArgumentException("Invalid dataActivityBits: ${dataActivityBits}") } - } -} diff --git a/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy b/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy index ec42cd66ad5..0dd3acebe7d 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/EqualityValueRule.groovy @@ -13,12 +13,8 @@ import org.prebid.server.functional.model.privacy.gpp.GppDataActivity @JsonDeserialize(using = EqualityValueRuleDeserialize.class) class EqualityValueRule extends ValueRestrictedRule { - EqualityValueRule(UsNationalPrivacySection privacySection, DataActivity value) { - super(privacySection, value) - } - EqualityValueRule(UsNationalPrivacySection privacySection, GppDataActivity value) { - super(privacySection, DataActivity.fromGppDataActivity(value)) + super(privacySection, value) } static class EqualityValueRuleDeserialize extends JsonDeserializer { @@ -27,7 +23,7 @@ class EqualityValueRule extends ValueRestrictedRule { EqualityValueRule deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { JsonNode node = jsonParser.getCodec().readTree(jsonParser) def privacySection = UsNationalPrivacySection.valueFromText(node?.get(0)?.get(JSON_LOGIC_VALUE_FIELD)?.textValue()) - def value = DataActivity.fromInt(node?.get(1)?.asInt()) + def value = GppDataActivity.fromInt(node?.get(1)?.asInt()) return new EqualityValueRule(privacySection, value) } } diff --git a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy index 2f683492acf..872556be3e7 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy @@ -6,6 +6,7 @@ import org.prebid.server.functional.model.request.GppSectionId import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.CAMEL_CASE import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.KEBAB_CASE +import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.SNAKE_CASE @ToString(includeNames = true, ignoreNulls = true) class GppModuleConfig { @@ -36,18 +37,20 @@ class GppModuleConfig { List sids = [GppSectionId.US_NAT_V1], Boolean normalizeFlags = true, ConfigCase configCase = CAMEL_CASE) { - - new GppModuleConfig().tap { - it.sids = sids - if (configCase == CAMEL_CASE) { - it.activityConfig = [activityConfig] - it.normalizeFlags = normalizeFlags - } else if (configCase = KEBAB_CASE) { - it.activityConfigKebabCase = [activityConfig] - it.normalizeFlagsKebabCase = normalizeFlags - } else { - it.activityConfigSnakeCase = [activityConfig] - it.normalizeFlagsSnakeCase = normalizeFlags + new GppModuleConfig(sids: sids).tap { + switch (configCase) { + case CAMEL_CASE -> { + it.activityConfig = [activityConfig] + it.normalizeFlags = normalizeFlags + } + case KEBAB_CASE -> { + it.activityConfigKebabCase = [activityConfig] + it.normalizeFlagsKebabCase = normalizeFlags + } + case SNAKE_CASE -> { + it.activityConfigSnakeCase = [activityConfig] + it.normalizeFlagsSnakeCase = normalizeFlags + } } } } diff --git a/src/test/groovy/org/prebid/server/functional/model/config/InequalityValueRule.groovy b/src/test/groovy/org/prebid/server/functional/model/config/InequalityValueRule.groovy index b9fcfcb6d67..e65ecc3421e 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/InequalityValueRule.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/InequalityValueRule.groovy @@ -7,12 +7,13 @@ import com.fasterxml.jackson.databind.JsonDeserializer import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.annotation.JsonDeserialize import groovy.transform.ToString +import org.prebid.server.functional.model.privacy.gpp.GppDataActivity @ToString(includeNames = true, ignoreNulls = true) @JsonDeserialize(using = InequalityValueRuleDeserialize.class) class InequalityValueRule extends ValueRestrictedRule { - InequalityValueRule(UsNationalPrivacySection privacySection, DataActivity value) { + InequalityValueRule(UsNationalPrivacySection privacySection, GppDataActivity value) { super(privacySection, value) } @@ -22,7 +23,7 @@ class InequalityValueRule extends ValueRestrictedRule { InequalityValueRule deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { JsonNode node = jsonParser.getCodec().readTree(jsonParser) def privacySection = UsNationalPrivacySection.valueFromText(node?.get(0)?.get(JSON_LOGIC_VALUE_FIELD)?.textValue()) - def value = DataActivity.fromInt(node?.get(1)?.asInt()) + def value = GppDataActivity.fromInt(node?.get(1)?.asInt()) return new InequalityValueRule(privacySection, value) } } diff --git a/src/test/groovy/org/prebid/server/functional/model/config/ValueRestrictedRule.groovy b/src/test/groovy/org/prebid/server/functional/model/config/ValueRestrictedRule.groovy index 0e2c0051c7e..913ae586a4c 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/ValueRestrictedRule.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/ValueRestrictedRule.groovy @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.JsonSerializer import com.fasterxml.jackson.databind.SerializerProvider import com.fasterxml.jackson.databind.annotation.JsonSerialize import groovy.transform.ToString +import org.prebid.server.functional.model.privacy.gpp.GppDataActivity @ToString(includeNames = true, ignoreNulls = true) @JsonSerialize(using = ValueRestrictedRuleSerializer.class) @@ -13,13 +14,13 @@ import groovy.transform.ToString abstract class ValueRestrictedRule { protected UsNationalPrivacySection privacySection - protected DataActivity value + protected GppDataActivity value protected static final String JSON_LOGIC_VALUE_FIELD = "var" - ValueRestrictedRule(UsNationalPrivacySection privacySection, DataActivity dataActivity) { + ValueRestrictedRule(UsNationalPrivacySection privacySection, GppDataActivity value) { this.privacySection = privacySection - this.value = dataActivity + this.value = value } static class ValueRestrictedRuleSerializer extends JsonSerializer { @@ -30,7 +31,7 @@ abstract class ValueRestrictedRule { jsonGenerator.writeStartObject() jsonGenerator.writeStringField(JSON_LOGIC_VALUE_FIELD, valueRestrictedRule.privacySection.value) jsonGenerator.writeEndObject() - jsonGenerator.writeObject(valueRestrictedRule.value.dataActivityBits) + jsonGenerator.writeObject(valueRestrictedRule.value.value) jsonGenerator.writeEndArray() } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/GppDataActivity.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/GppDataActivity.groovy index 36a015bde7d..2ca99595248 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/GppDataActivity.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/GppDataActivity.groovy @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonValue enum GppDataActivity { + INVALID(-1), NOT_APPLICABLE(0), NO_CONSENT(1), CONSENT(2) @@ -14,4 +15,9 @@ enum GppDataActivity { GppDataActivity(int value) { this.value = value } + + static GppDataActivity fromInt(int dataActivityBits) { + values().find { it.value == dataActivityBits } + ?: { throw new IllegalArgumentException("Invalid dataActivityBits: ${dataActivityBits}") } as GppDataActivity + } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy index 2bc1f03458c..8a456a5fb72 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsCaliforniaV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsCaliforniaV1ChildSensitiveData { GppDataActivity toSellUnder16 @@ -16,13 +14,6 @@ class UsCaliforniaV1ChildSensitiveData { } } - static UsCaliforniaV1ChildSensitiveData getRandom(List excludedActivities) { - new UsCaliforniaV1ChildSensitiveData().tap { - it.toSellUnder16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.toShareUnder16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - List getContentList() { [toShareUnder16, toSellUnder16]*.value.collect { it ?: 0 } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy index 72d40a316ad..55896da56c9 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy @@ -12,12 +12,6 @@ class UsColoradoV1ChildSensitiveData { } } - static UsColoradoV1ChildSensitiveData getRandom(List excludedActivities) { - new UsColoradoV1ChildSensitiveData().tap { - it.childSensitive = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - Integer getContentList() { this.childSensitive.value } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy index 53fd8a9ae68..e1a78e8e750 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy @@ -19,14 +19,6 @@ class UsConnecticutV1ChildSensitiveData { } } - static UsConnecticutV1ChildSensitiveData getRandom(List excludedActivities = []) { - new UsConnecticutV1ChildSensitiveData().tap { - it.childUnder13 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom13to16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom13to16Targeted = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - List getContentList() { [childUnder13, childFrom13to16, childFrom13to16Targeted]*.value.collect { it ?: 0 } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy index ab2edc1d8ce..c43748b7aea 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy @@ -16,13 +16,6 @@ class UsNationalV1ChildSensitiveData { } } - static UsNationalV1ChildSensitiveData getRandom(List excludedActivities) { - new UsNationalV1ChildSensitiveData().tap { - it.childUnder13 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom13to16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - List getContentList() { [childFrom13to16, childUnder13]*.value.collect { it ?: 0 } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy index 5edbd69b4d0..4801821db18 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy @@ -17,14 +17,6 @@ class UsNationalV2ChildSensitiveData extends UsNationalV1ChildSensitiveData { } } - static UsNationalV2ChildSensitiveData getRandom(List excludedActivities) { - new UsNationalV2ChildSensitiveData().tap { - it.childUnder13 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom13to16 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - it.childFrom16to17 = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - List getContentList() { [childFrom13to16, childUnder13, childFrom16to17]*.value.collect { it ?: 0 } } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy index 063899d850c..bbb5e896b17 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy @@ -13,12 +13,6 @@ class UsUtahV1ChildSensitiveData { } } - static UsUtahV1ChildSensitiveData getRandom(List excludedActivities) { - new UsUtahV1ChildSensitiveData().tap { - it.childSensitive = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - Integer getContentList() { childSensitive.value } diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy index 2cffb109ec9..1cb63ea9ffa 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy @@ -13,12 +13,6 @@ class UsVirginiaV1ChildSensitiveData { } } - static UsVirginiaV1ChildSensitiveData getRandom(List excludedActivities = []) { - new UsVirginiaV1ChildSensitiveData().tap { - it.childSensitive = PBSUtils.getRandomEnum(GppDataActivity, excludedActivities) - } - } - Integer getContentList() { childSensitive.value } diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy index ae8267076ce..b5dd3164ec0 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy @@ -2,7 +2,6 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -860,20 +859,20 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | operator | caseType | rulesList - false | OR | CAMEL_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | OR | CAMEL_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | AND | CAMEL_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] - - false | OR | KEBAB_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | OR | KEBAB_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | AND | KEBAB_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] - - false | OR | SNAKE_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | OR | SNAKE_CASE | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - true | AND | SNAKE_CASE | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)] + false | OR | CAMEL_CASE | [new EqualityValueRule(GPC, NO_CONSENT)] + true | OR | CAMEL_CASE | [new InequalityValueRule(GPC, NO_CONSENT)] + true | AND | CAMEL_CASE | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)] + + false | OR | KEBAB_CASE | [new EqualityValueRule(GPC, NO_CONSENT)] + true | OR | KEBAB_CASE | [new InequalityValueRule(GPC, NO_CONSENT)] + true | AND | KEBAB_CASE | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)] + + false | OR | SNAKE_CASE | [new EqualityValueRule(GPC, NO_CONSENT)] + true | OR | SNAKE_CASE | [new InequalityValueRule(GPC, NO_CONSENT)] + true | AND | SNAKE_CASE | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)] } def "PBS auction call when privacy regulation match custom requirement should ignore call to bidder"() { @@ -911,13 +910,13 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should process request and emit error log"() { @@ -1660,10 +1659,10 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS amp call when privacy regulation match custom requirement should ignore call to bidder"() { @@ -1711,13 +1710,13 @@ class GppFetchBidActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should process request and emit error log"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy index cbc18d04b9f..87d23a3d740 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppSyncUserActivitiesSpec.groovy @@ -7,7 +7,6 @@ import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.AccountPrivacyConfig import org.prebid.server.functional.model.config.AccountSetting import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -585,7 +584,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { and: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS cookie sync call when privacy module contain invalid GPP string should respond with required bidder URL and emit warning in response"() { @@ -696,8 +696,10 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert response.getBidderUserSync(GENERIC).userSync.url where: - accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] + accountGppConfig << [ + new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) + ] } def "PBS cookie sync call when regs.gpp in request is allowing should include proper responded with bidders URLs"() { @@ -849,10 +851,10 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS cookie sync when privacy regulation match custom requirement should exclude bidders URLs"() { @@ -890,13 +892,13 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS cookie sync call when custom privacy regulation empty and normalize is disabled should respond with an error and update metric"() { @@ -1603,7 +1605,8 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { and: "Logs should contain error" def logs = activityPbsService.getLogsByTime(startTime) - assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 + assert getLogsByText(logs, "UsNat privacy module creation failed: Unable to decode UsNatCoreSegment " + + "'${INVALID_GPP_SEGMENT}'. Activity: SYNC_USER. Section: ${US_NAT_V1.value}. Gpp: $INVALID_GPP_STRING").size() == 1 } def "PBS setuid request when privacy module contain invalid GPP string should respond with valid bidders UIDs cookies"() { @@ -1722,9 +1725,9 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { assert response.responseBody where: - accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true), - + accountGppConfig << [ + new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) ] } @@ -1887,10 +1890,10 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS setuid call when privacy regulation match custom requirement should reject bidders with status code invalidStatusCode"() { @@ -1933,13 +1936,13 @@ class GppSyncUserActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS setuid call when custom privacy regulation empty and normalize is disabled should respond with required UIDs cookies"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy index 91b29c2bd4d..1db77ef0b90 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitEidsActivitiesSpec.groovy @@ -2,7 +2,6 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -742,15 +741,18 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { new UsNatV1Consent.Builder() .setPersonalDataConsents(CONSENT) .build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: NO_CONSENT, + new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: NO_CONSENT, religiousBeliefs: NO_CONSENT, healthInfo: NO_CONSENT, orientation: NO_CONSENT, citizenshipStatus: NO_CONSENT, - unionMembership: NO_CONSENT,)).build(), + unionMembership: NO_CONSENT,)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: CONSENT, religiousBeliefs: CONSENT, healthInfo: CONSENT, orientation: CONSENT, @@ -760,10 +762,12 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT)).build(), + communicationContents: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: CONSENT, religiousBeliefs: CONSENT, healthInfo: CONSENT, orientation: CONSENT, @@ -773,17 +777,24 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT)).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: NO_CONSENT, - biometricId: NO_CONSENT, - idNumbers: NO_CONSENT, - accountInfo: NO_CONSENT, - communicationContents: NO_CONSENT)).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: CONSENT, - biometricId: CONSENT, - idNumbers: CONSENT, - accountInfo: CONSENT, - communicationContents: CONSENT)).build()] + communicationContents: CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT)) + .build()] } def "PBS auction call should remove EIDS fields in request when privacy module contain opt out of disallow GPP UsNat v2 logic"() { @@ -998,8 +1009,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { assert genericBidderRequest.user.eids[0].source == bidRequest.user.eids[0].source where: - accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] + accountGppConfig << [ + new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) + ] } def "PBS auction call when regs.gpp in request is allowing should leave EIDS fields in request"() { @@ -1153,10 +1166,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS auction call when privacy regulation match custom requirement should remove EIDS fields in request"() { @@ -1197,13 +1210,13 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should leave EIDS fields in request and emit error log"() { @@ -1885,15 +1898,19 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { new UsNatV1Consent.Builder() .setPersonalDataConsents(CONSENT) .build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: NO_CONSENT, - religiousBeliefs: NO_CONSENT, - healthInfo: NO_CONSENT, - orientation: NO_CONSENT, - citizenshipStatus: NO_CONSENT, - unionMembership: NO_CONSENT,)).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT,)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: CONSENT, religiousBeliefs: CONSENT, healthInfo: CONSENT, orientation: CONSENT, @@ -1903,10 +1920,12 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT)).build(), + communicationContents: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData(racialEthnicOrigin: CONSENT, + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: CONSENT, religiousBeliefs: CONSENT, healthInfo: CONSENT, orientation: CONSENT, @@ -1916,17 +1935,24 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT)).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: NO_CONSENT, - biometricId: NO_CONSENT, - idNumbers: NO_CONSENT, - accountInfo: NO_CONSENT, - communicationContents: NO_CONSENT)).build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData(geneticId: CONSENT, - biometricId: CONSENT, - idNumbers: CONSENT, - accountInfo: CONSENT, - communicationContents: CONSENT)).build()] + communicationContents: CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + geneticId: NO_CONSENT, + biometricId: NO_CONSENT, + idNumbers: NO_CONSENT, + accountInfo: NO_CONSENT, + communicationContents: NO_CONSENT)) + .build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + geneticId: CONSENT, + biometricId: CONSENT, + idNumbers: CONSENT, + accountInfo: CONSENT, + communicationContents: CONSENT)) + .build()] } def "PBS amp call should remove EIDS fields in request when privacy module contain opt out of disallow GPP UsNat v2 logic"() { @@ -2184,8 +2210,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { assert genericBidderRequest.user.eids[0].source == ampStoredRequest.user.eids[0].source where: - accountGppConfig << [new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), - new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true)] + accountGppConfig << [ + new AccountGppConfig(code: IAB_US_GENERAL, enabled: false), + new AccountGppConfig(code: IAB_US_GENERAL, config: new GppModuleConfig(skipSids: [US_NAT_V1]), enabled: true) + ] } def "PBS amp call when regs.gpp empty in request should leave EIDS fields in request"() { @@ -2423,10 +2451,10 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS amp call when privacy regulation match custom requirement should remove EIDS fields from request"() { @@ -2476,13 +2504,13 @@ class GppTransmitEidsActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should leave EIDS fields in request and emit error log"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy index c1d449e43bc..e3be1b13e98 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitPreciseGeoActivitiesSpec.groovy @@ -2,7 +2,6 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -1124,19 +1123,16 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: CONSENT - )).build(), + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: CONSENT - )).build(), + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: NO_CONSENT - )).build() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: NO_CONSENT)) + .build() ] } @@ -1530,10 +1526,10 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS auction call when privacy regulation match custom requirement should round lat/lon data to 2 digits"() { @@ -1597,14 +1593,14 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should not round lat/lon data and emit error log"() { @@ -2503,19 +2499,16 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: CONSENT - )).build(), + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: CONSENT - )).build(), + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) - .setSensitiveDataProcessing(new UsNationalV1SensitiveData( - geolocation: NO_CONSENT - )).build() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData(geolocation: NO_CONSENT)) + .build() ] } @@ -2891,10 +2884,10 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS amp call when privacy regulation match custom requirement should round lat/lon data to 2 digits"() { @@ -2968,14 +2961,14 @@ class GppTransmitPreciseGeoActivitiesSpec extends PrivacyBaseSpec { } where: - gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + gppConsent | valueRules + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should not round lat/lon data and emit error log"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy index 3ba13f2b596..b648a4fe91c 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppTransmitUfpdActivitiesSpec.groovy @@ -3,7 +3,6 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGdprConfig import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.DataActivity import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -1715,10 +1714,10 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS auction call when privacy regulation match custom requirement should remove UFPD fields in request"() { @@ -1774,13 +1773,13 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS auction call when custom privacy regulation empty and normalize is disabled should leave UFPD fields in request and emit error log"() { @@ -2743,14 +2742,15 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { new UsNatV1Consent.Builder() .setPersonalDataConsents(CONSENT) .build(), - new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( - racialEthnicOrigin: NO_CONSENT, - religiousBeliefs: NO_CONSENT, - healthInfo: NO_CONSENT, - orientation: NO_CONSENT, - citizenshipStatus: NO_CONSENT, - unionMembership: NO_CONSENT, - )).build(), + new UsNatV1Consent.Builder() + .setSensitiveDataProcessing(new UsNationalV1SensitiveData( + racialEthnicOrigin: NO_CONSENT, + religiousBeliefs: NO_CONSENT, + healthInfo: NO_CONSENT, + orientation: NO_CONSENT, + citizenshipStatus: NO_CONSENT, + unionMembership: NO_CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataLimitUseNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( @@ -2764,8 +2764,8 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT - )).build(), + communicationContents: CONSENT)) + .build(), new UsNatV1Consent.Builder() .setSensitiveDataProcessingOptOutNotice(Notice.NOT_APPLICABLE) .setSensitiveDataProcessing(new UsNationalV1SensitiveData( @@ -2779,22 +2779,22 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { idNumbers: CONSENT, accountInfo: CONSENT, unionMembership: CONSENT, - communicationContents: CONSENT - )).build(), + communicationContents: CONSENT)) + .build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( geneticId: NO_CONSENT, biometricId: NO_CONSENT, idNumbers: NO_CONSENT, accountInfo: NO_CONSENT, - communicationContents: NO_CONSENT - )).build(), + communicationContents: NO_CONSENT)) + .build(), new UsNatV1Consent.Builder().setSensitiveDataProcessing(new UsNationalV1SensitiveData( geneticId: CONSENT, biometricId: CONSENT, idNumbers: CONSENT, accountInfo: CONSENT, - communicationContents: CONSENT - )).build() + communicationContents: CONSENT)) + .build() ] } @@ -3459,10 +3459,10 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gpcValue | accountLogic - false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)]) - true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_PROVIDED)]) + false | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new EqualityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(OR, [new InequalityValueRule(GPC, NO_CONSENT)]) + true | LogicalRestrictedRule.generateSingleRestrictedRule(AND, [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, NO_CONSENT)]) } def "PBS amp call when privacy regulation match custom requirement should remove UFPD fields from request"() { @@ -3527,13 +3527,13 @@ class GppTransmitUfpdActivitiesSpec extends PrivacyBaseSpec { where: gppConsent | valueRules - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, DataActivity.NOTICE_PROVIDED)] - new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(SHARING_NOTICE, DataActivity.NOTICE_NOT_PROVIDED)] - new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, DataActivity.NOTICE_PROVIDED), - new EqualityValueRule(PERSONAL_DATA_CONSENTS, DataActivity.NOTICE_NOT_PROVIDED)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(false).build() | [new InequalityValueRule(GPC, NO_CONSENT)] + new UsNatV1Consent.Builder().setGpc(true).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(SHARING_NOTICE, CONSENT)] + new UsNatV1Consent.Builder().setPersonalDataConsents(CONSENT).build() | [new EqualityValueRule(GPC, NO_CONSENT), + new EqualityValueRule(PERSONAL_DATA_CONSENTS, CONSENT)] } def "PBS amp call when custom privacy regulation empty and normalize is disabled should leave UFPD fields in request and emit error log"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy index 793e3cfe0c0..ccb1ab167ac 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy @@ -584,8 +584,8 @@ abstract class PrivacyBaseSpec extends BaseSpec { } protected static String generateSensitiveGpp(GppSectionId sectionId, Map fieldsMap) { - def sensitiveData - def consentBuilder + Object sensitiveData + Object consentBuilder switch (sectionId) { case US_CA_V1: @@ -620,8 +620,8 @@ abstract class PrivacyBaseSpec extends BaseSpec { } protected static String generateChildSensitiveGpp(GppSectionId sectionId, List fields) { - def childSensitiveData - def consentBuilder + Object childSensitiveData + Object consentBuilder switch (sectionId) { case US_CA_V1: From e687601dfbfdaebcf0ab9b870174942ab2791c53 Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Fri, 5 Dec 2025 16:04:42 +0200 Subject: [PATCH 4/6] update after review --- .../gpp/UsColoradoV1ChildSensitiveData.groovy | 2 -- .../UsConnecticutV1ChildSensitiveData.groovy | 2 -- .../gpp/UsNationalV1ChildSensitiveData.groovy | 2 -- .../gpp/UsNationalV2ChildSensitiveData.groovy | 2 -- .../gpp/UsUtahV1ChildSensitiveData.groovy | 2 -- .../gpp/UsVirginiaV1ChildSensitiveData.groovy | 2 -- .../tests/privacy/PrivacyBaseSpec.groovy | 36 ++++++++----------- 7 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy index 55896da56c9..659d514a9f0 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsColoradoV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsColoradoV1ChildSensitiveData { GppDataActivity childSensitive diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy index e1a78e8e750..0c9e2eae97c 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsConnecticutV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsConnecticutV1ChildSensitiveData { GppDataActivity childUnder13 diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy index c43748b7aea..5a1c3fae625 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsNationalV1ChildSensitiveData { GppDataActivity childUnder13 diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy index 4801821db18..aaf325b93aa 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsNationalV2ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsNationalV2ChildSensitiveData extends UsNationalV1ChildSensitiveData { GppDataActivity childFrom16to17 diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy index bbb5e896b17..f0557652782 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsUtahV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsUtahV1ChildSensitiveData { GppDataActivity childSensitive diff --git a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy index 1cb63ea9ffa..4be70d3739d 100644 --- a/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/privacy/gpp/UsVirginiaV1ChildSensitiveData.groovy @@ -1,7 +1,5 @@ package org.prebid.server.functional.model.privacy.gpp -import org.prebid.server.functional.util.PBSUtils - class UsVirginiaV1ChildSensitiveData { GppDataActivity childSensitive diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy index ccb1ab167ac..7d8ed79de7d 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/PrivacyBaseSpec.groovy @@ -620,40 +620,34 @@ abstract class PrivacyBaseSpec extends BaseSpec { } protected static String generateChildSensitiveGpp(GppSectionId sectionId, List fields) { - Object childSensitiveData - Object consentBuilder - switch (sectionId) { case US_CA_V1: - childSensitiveData = UsCaliforniaV1ChildSensitiveData.getDefault(*fields) - consentBuilder = new UsCaV1Consent.Builder() - break + return new UsCaV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsCaliforniaV1ChildSensitiveData.getDefault(*fields)) + .build().toString() case US_VA_V1: - childSensitiveData = UsVirginiaV1ChildSensitiveData.getDefault(fields.first) - consentBuilder = new UsVaV1Consent.Builder() - break + return new UsVaV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsVirginiaV1ChildSensitiveData.getDefault(fields.first)) + .build().toString() case US_CO_V1: - childSensitiveData = UsColoradoV1ChildSensitiveData.getDefault(fields.first) - consentBuilder = new UsCoV1Consent.Builder() - break + return new UsCoV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsColoradoV1ChildSensitiveData.getDefault(fields.first)) + .build().toString() case US_UT_V1: - childSensitiveData = UsUtahV1ChildSensitiveData.getDefault(fields.first) - consentBuilder = new UsUtV1Consent.Builder() - break + return new UsUtV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsUtahV1ChildSensitiveData.getDefault(fields.first)) + .build().toString() case US_CT_V1: - childSensitiveData = UsConnecticutV1ChildSensitiveData.getDefault(*fields) - consentBuilder = new UsCtV1Consent.Builder() - break - + return new UsCtV1Consent.Builder() + .setKnownChildSensitiveDataConsents(UsConnecticutV1ChildSensitiveData.getDefault(*fields)) + .build().toString() default: throw new IllegalArgumentException("Unsupported Section ID for Child Data: $sectionId") } - - consentBuilder.setKnownChildSensitiveDataConsents(childSensitiveData).build().toString() } protected static List getFullTcfCompanyEnforcementRequirementsRandomlyWithExcludePurpose(Purpose purpose) { From 1121074cabef1a8b03fb35f74a780ba6dd7e5e0b Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Fri, 5 Dec 2025 16:09:24 +0200 Subject: [PATCH 5/6] update after review --- .../server/functional/model/config/ConfigCase.groovy | 6 ++++++ .../functional/model/config/GppModuleConfig.groovy | 10 +++------- .../tests/privacy/GppFetchBidActivitiesSpec.groovy | 7 ++++--- 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 src/test/groovy/org/prebid/server/functional/model/config/ConfigCase.groovy diff --git a/src/test/groovy/org/prebid/server/functional/model/config/ConfigCase.groovy b/src/test/groovy/org/prebid/server/functional/model/config/ConfigCase.groovy new file mode 100644 index 00000000000..f3dc523371c --- /dev/null +++ b/src/test/groovy/org/prebid/server/functional/model/config/ConfigCase.groovy @@ -0,0 +1,6 @@ +package org.prebid.server.functional.model.config + +enum ConfigCase { + + CAMEL_CASE, KEBAB_CASE, SNAKE_CASE +} diff --git a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy index 872556be3e7..ea6899fbb25 100644 --- a/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/config/GppModuleConfig.groovy @@ -4,9 +4,9 @@ import com.fasterxml.jackson.annotation.JsonProperty import groovy.transform.ToString import org.prebid.server.functional.model.request.GppSectionId -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.CAMEL_CASE -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.KEBAB_CASE -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.SNAKE_CASE +import static org.prebid.server.functional.model.config.ConfigCase.CAMEL_CASE +import static org.prebid.server.functional.model.config.ConfigCase.KEBAB_CASE +import static org.prebid.server.functional.model.config.ConfigCase.SNAKE_CASE @ToString(includeNames = true, ignoreNulls = true) class GppModuleConfig { @@ -54,8 +54,4 @@ class GppModuleConfig { } } } - - enum ConfigCase { - CAMEL_CASE, KEBAB_CASE, SNAKE_CASE - } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy index b5dd3164ec0..8a5684288d6 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy @@ -2,6 +2,7 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig +import org.prebid.server.functional.model.config.ConfigCase import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule @@ -33,9 +34,9 @@ import org.prebid.server.functional.util.privacy.gpp.v2.UsNatV2Consent import java.time.Instant import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.CAMEL_CASE -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.KEBAB_CASE -import static org.prebid.server.functional.model.config.GppModuleConfig.ConfigCase.SNAKE_CASE +import static org.prebid.server.functional.model.config.ConfigCase.CAMEL_CASE +import static org.prebid.server.functional.model.config.ConfigCase.KEBAB_CASE +import static org.prebid.server.functional.model.config.ConfigCase.SNAKE_CASE import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.AND import static org.prebid.server.functional.model.config.LogicalRestrictedRule.LogicalOperation.OR import static org.prebid.server.functional.model.config.UsNationalPrivacySection.CHILD_CONSENTS_BELOW_13 From 1019c2d9a39037517ca80e8641a5f9e0e9c524a7 Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Fri, 5 Dec 2025 16:16:42 +0200 Subject: [PATCH 6/6] update after review --- .../functional/tests/privacy/GppFetchBidActivitiesSpec.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy index 8a5684288d6..d292bd9e6f1 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GppFetchBidActivitiesSpec.groovy @@ -2,7 +2,6 @@ package org.prebid.server.functional.tests.privacy import org.prebid.server.functional.model.config.AccountGppConfig import org.prebid.server.functional.model.config.ActivityConfig -import org.prebid.server.functional.model.config.ConfigCase import org.prebid.server.functional.model.config.EqualityValueRule import org.prebid.server.functional.model.config.GppModuleConfig import org.prebid.server.functional.model.config.InequalityValueRule