@@ -3,6 +3,8 @@ package org.prebid.server.functional.tests.privacy
33import org.mockserver.model.Delay
44import org.prebid.server.functional.model.ChannelType
55import org.prebid.server.functional.model.config.AccountGdprConfig
6+ import org.prebid.server.functional.model.config.AccountMetricsConfig
7+ import org.prebid.server.functional.model.config.AccountMetricsVerbosityLevel
68import org.prebid.server.functional.model.config.PurposeConfig
79import org.prebid.server.functional.model.config.PurposeEnforcement
810import org.prebid.server.functional.model.pricefloors.Country
@@ -21,6 +23,8 @@ import java.time.Instant
2123import static org.prebid.server.functional.model.ChannelType.PBJS
2224import static org.prebid.server.functional.model.ChannelType.WEB
2325import static org.prebid.server.functional.model.bidder.BidderName.GENERIC
26+
27+ import static org.prebid.server.functional.model.config.AccountMetricsVerbosityLevel.DETAILED
2428import static org.prebid.server.functional.model.config.Purpose.P1
2529import static org.prebid.server.functional.model.config.Purpose.P2
2630import static org.prebid.server.functional.model.config.Purpose.P4
@@ -960,4 +964,139 @@ class GdprAuctionSpec extends PrivacyBaseSpec {
960964 null | BULGARIA | null | null | [:]
961965 null | null | null | null | [:]
962966 }
967+
968+ def " PBS auction shouldn't update buyeruid scrubbed metrics when user.buyeruid not requested" () {
969+ given : " Default bid requests with personal data"
970+ def bidRequest = bidRequestWithPersonalData. tap {
971+ regs. gdpr = 1
972+ user. buyeruid = null
973+ user. ext. consent = new TcfConsent.Builder (). build()
974+ ext. prebid. trace = VERBOSE
975+ }
976+
977+ and : " Save account config with requireConsent into DB"
978+ def purposes = [(P2 ): new PurposeConfig (enforcePurpose : NO , enforceVendors : false )]
979+ def accountGdprConfig = new AccountGdprConfig (purposes : purposes)
980+ def account = getAccountWithGdpr(bidRequest. accountId, accountGdprConfig). tap {
981+ config. metrics = new AccountMetricsConfig (verbosityLevel : verbosityLevel)
982+ }
983+ accountDao. save(account)
984+
985+ and : " Flush metric"
986+ flushMetrics(privacyPbsService)
987+
988+ when : " PBS processes auction requests"
989+ privacyPbsService. sendAuctionRequest(bidRequest)
990+
991+ then : " Bidder request should mask user personal data"
992+ def bidderRequest = bidder. getBidderRequest(bidRequest. id)
993+ verifyAll(bidderRequest. user) {
994+ ! id
995+ ! buyeruid
996+ ! yob
997+ ! gender
998+ ! eids
999+ ! data
1000+ ! geo
1001+ ! ext
1002+ ! eids
1003+ ! ext?. eids
1004+ }
1005+
1006+ and : " Metrics buyeruid scrubbed shouldn't be updated"
1007+ def metrics = privacyPbsService. sendCollectedMetricsRequest()
1008+ assert ! metrics[" adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ]
1009+ assert ! metrics[" account.${ account.uuid} .adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ]
1010+
1011+ where :
1012+ verbosityLevel << [DETAILED , AccountMetricsVerbosityLevel . BASIC ]
1013+ }
1014+
1015+ def " PBS auction should update buyeruid scrubbed general metrics when user.buyeruid requested and verbosityLevel BASIC" () {
1016+ given : " Default bid requests with personal data"
1017+ def bidRequest = bidRequestWithPersonalData. tap {
1018+ regs. gdpr = 1
1019+ user. ext. consent = new TcfConsent.Builder (). build()
1020+ ext. prebid. trace = VERBOSE
1021+ }
1022+
1023+ and : " Save account config with requireConsent into DB"
1024+ def purposes = [(P2 ): new PurposeConfig (enforcePurpose : NO , enforceVendors : false )]
1025+ def accountGdprConfig = new AccountGdprConfig (purposes : purposes)
1026+ def account = getAccountWithGdpr(bidRequest. accountId, accountGdprConfig). tap {
1027+ config. metrics = new AccountMetricsConfig (verbosityLevel : AccountMetricsVerbosityLevel . BASIC )
1028+ }
1029+ accountDao. save(account)
1030+
1031+ and : " Flush metric"
1032+ flushMetrics(privacyPbsService)
1033+
1034+ when : " PBS processes auction requests"
1035+ privacyPbsService. sendAuctionRequest(bidRequest)
1036+
1037+ then : " Bidder request should mask user personal data"
1038+ def bidderRequest = bidder. getBidderRequest(bidRequest. id)
1039+ verifyAll(bidderRequest. user) {
1040+ ! id
1041+ ! buyeruid
1042+ ! yob
1043+ ! gender
1044+ ! eids
1045+ ! data
1046+ ! geo
1047+ ! ext
1048+ ! eids
1049+ ! ext?. eids
1050+ }
1051+
1052+ and : " Metrics buyeruid scrubbed should be updated"
1053+ def metrics = privacyPbsService. sendCollectedMetricsRequest()
1054+ assert metrics[" adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ] == 1
1055+
1056+ and : " Account metric shouldn't be populated"
1057+ assert ! metrics[" account.${ account.uuid} .adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ]
1058+ }
1059+
1060+ def " PBS auction should update buyeruid scrubbed general and account metrics when user.buyeruid requested and verbosityLevel DETAILED" () {
1061+ given : " Default bid requests with personal data"
1062+ def bidRequest = bidRequestWithPersonalData. tap {
1063+ regs. gdpr = 1
1064+ user. ext. consent = new TcfConsent.Builder (). build()
1065+ ext. prebid. trace = VERBOSE
1066+ }
1067+
1068+ and : " Save account config with requireConsent into DB"
1069+ def purposes = [(P2 ): new PurposeConfig (enforcePurpose : NO , enforceVendors : false )]
1070+ def accountGdprConfig = new AccountGdprConfig (purposes : purposes)
1071+ def account = getAccountWithGdpr(bidRequest. accountId, accountGdprConfig). tap {
1072+ config. metrics = new AccountMetricsConfig (verbosityLevel : DETAILED )
1073+ }
1074+ accountDao. save(account)
1075+
1076+ and : " Flush metric"
1077+ flushMetrics(privacyPbsService)
1078+
1079+ when : " PBS processes auction requests"
1080+ privacyPbsService. sendAuctionRequest(bidRequest)
1081+
1082+ then : " Bidder request should mask user personal data"
1083+ def bidderRequest = bidder. getBidderRequest(bidRequest. id)
1084+ verifyAll(bidderRequest. user) {
1085+ ! id
1086+ ! buyeruid
1087+ ! yob
1088+ ! gender
1089+ ! eids
1090+ ! data
1091+ ! geo
1092+ ! ext
1093+ ! eids
1094+ ! ext?. eids
1095+ }
1096+
1097+ and : " Metrics buyeruid scrubbed should be updated"
1098+ def metrics = privacyPbsService. sendCollectedMetricsRequest()
1099+ assert metrics[" adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ] == 1
1100+ assert metrics[" account.${ account.uuid} .adapter.${ GENERIC.value} .requests.buyeruid_scrubbed" ] == 1
1101+ }
9631102}
0 commit comments