@@ -4,9 +4,12 @@ import org.prebid.server.functional.model.db.StoredRequest
44import org.prebid.server.functional.model.db.StoredResponse
55import org.prebid.server.functional.model.request.amp.AmpRequest
66import org.prebid.server.functional.model.request.auction.BidRequest
7+ import org.prebid.server.functional.model.request.auction.ConsentedProvidersSettings
78import org.prebid.server.functional.model.request.auction.DistributionChannel
89import org.prebid.server.functional.model.request.auction.Site
910import org.prebid.server.functional.model.request.auction.StoredAuctionResponse
11+ import org.prebid.server.functional.model.request.auction.User
12+ import org.prebid.server.functional.model.request.auction.UserExt
1013import org.prebid.server.functional.model.response.auction.SeatBid
1114import org.prebid.server.functional.service.PrebidServerException
1215import org.prebid.server.functional.util.PBSUtils
@@ -56,7 +59,7 @@ class AmpSpec extends BaseSpec {
5659 assert exception. responseBody == " Invalid request format: request.${ channel.value.toLowerCase()} must not exist in AMP stored requests."
5760
5861 where :
59- channel << [DistributionChannel . APP , DistributionChannel . DOOH ]
62+ channel << [DistributionChannel . APP , DistributionChannel . DOOH ]
6063 }
6164
6265 def " PBS should return info from the stored response when it's defined in the stored request" () {
@@ -180,4 +183,79 @@ class AmpSpec extends BaseSpec {
180183 assert bidderRequest. imp[0 ]?. banner?. format[0 ]?. weight == ampStoredRequest. imp[0 ]. banner. format[0 ]. weight
181184 assert bidderRequest. regs?. gdpr == ampStoredRequest. regs. gdpr
182185 }
186+
187+ def " PBS should pass addtl_consent to user.ext.{consented_providers_settings/ConsentedProvidersSettings}.consented_providers" () {
188+ given : " Default amp request with addtlConsent"
189+ def randomAddtlConsent = PBSUtils . randomString
190+ def ampRequest = AmpRequest . defaultAmpRequest. tap {
191+ addtlConsent = randomAddtlConsent
192+ }
193+
194+ and : " Save storedRequest into DB"
195+ def ampStoredRequest = BidRequest . defaultBidRequest. tap {
196+ user = new User (ext : new UserExt (
197+ consentedProvidersSettingsCamelCase : new ConsentedProvidersSettings (consentedProviders : PBSUtils . randomString),
198+ consentedProvidersSettings : new ConsentedProvidersSettings (consentedProviders : PBSUtils . randomString)))
199+ }
200+ def storedRequest = StoredRequest . getStoredRequest(ampRequest, ampStoredRequest)
201+ storedRequestDao. save(storedRequest)
202+
203+ when : " PBS processes amp request"
204+ defaultPbsService. sendAmpRequest(ampRequest)
205+
206+ then : " Bidder request should contain addtl consent"
207+ def bidderRequest = bidder. getBidderRequest(ampStoredRequest. id)
208+ assert bidderRequest. user. ext. consentedProvidersSettingsCamelCase. consentedProviders == randomAddtlConsent
209+ assert bidderRequest. user. ext. consentedProvidersSettings. consentedProviders == randomAddtlConsent
210+ }
211+
212+ def " PBS should process original user.ext.{consented_providers_settings/ConsentedProvidersSettings}.consented_providers when ampRequest doesn't contain addtl_consent" () {
213+ given : " Default amp request with addtlConsent"
214+ def ampRequest = AmpRequest . defaultAmpRequest. tap {
215+ addtlConsent = null
216+ }
217+
218+ and : " Save storedRequest into DB"
219+ def consentProvidersKebabCase = PBSUtils . randomString
220+ def consentProviders = PBSUtils . randomString
221+ def ampStoredRequest = BidRequest . defaultBidRequest. tap {
222+ user = new User (ext : new UserExt (
223+ consentedProvidersSettingsCamelCase : new ConsentedProvidersSettings (consentedProviders : consentProvidersKebabCase),
224+ consentedProvidersSettings : new ConsentedProvidersSettings (consentedProviders : consentProviders)))
225+ }
226+ def storedRequest = StoredRequest . getStoredRequest(ampRequest, ampStoredRequest)
227+ storedRequestDao. save(storedRequest)
228+
229+ when : " PBS processes amp request"
230+ defaultPbsService. sendAmpRequest(ampRequest)
231+
232+ then : " Bidder request should contain requested consent"
233+ def bidderRequest = bidder. getBidderRequest(ampStoredRequest. id)
234+ assert bidderRequest. user. ext. consentedProvidersSettingsCamelCase. consentedProviders == consentProvidersKebabCase
235+ assert bidderRequest. user. ext. consentedProvidersSettings. consentedProviders == consentProviders
236+ }
237+
238+ def " PBS should left user.ext.{consented_providers_settings/ConsentedProvidersSettings}.consented_providers empty when addtl_consent and original fields are empty" () {
239+ given : " Default amp request with addtlConsent"
240+ def ampRequest = AmpRequest . defaultAmpRequest. tap {
241+ addtlConsent = null
242+ }
243+
244+ and : " Save storedRequest into DB"
245+ def ampStoredRequest = BidRequest . defaultBidRequest. tap {
246+ user = new User (ext : new UserExt (
247+ consentedProvidersSettingsCamelCase : new ConsentedProvidersSettings (consentedProviders : null ),
248+ consentedProvidersSettings : new ConsentedProvidersSettings (consentedProviders : null )))
249+ }
250+ def storedRequest = StoredRequest . getStoredRequest(ampRequest, ampStoredRequest)
251+ storedRequestDao. save(storedRequest)
252+
253+ when : " PBS processes amp request"
254+ defaultPbsService. sendAmpRequest(ampRequest)
255+
256+ then : " Bidder request shouldn't contain consent"
257+ def bidderRequest = bidder. getBidderRequest(ampStoredRequest. id)
258+ assert ! bidderRequest. user. ext. consentedProvidersSettingsCamelCase. consentedProviders
259+ assert ! bidderRequest. user. ext. consentedProvidersSettings. consentedProviders
260+ }
183261}
0 commit comments