diff --git a/src/test/groovy/org/prebid/server/functional/tests/TargetingSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/TargetingSpec.groovy index d9d337b3c27..2043da33436 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/TargetingSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/TargetingSpec.groovy @@ -12,6 +12,7 @@ import org.prebid.server.functional.model.db.StoredRequest import org.prebid.server.functional.model.db.StoredResponse import org.prebid.server.functional.model.request.amp.AmpRequest import org.prebid.server.functional.model.request.auction.AdServerTargeting +import org.prebid.server.functional.model.request.auction.App import org.prebid.server.functional.model.request.auction.BidRequest import org.prebid.server.functional.model.request.auction.Imp import org.prebid.server.functional.model.request.auction.MultiBid @@ -20,6 +21,7 @@ import org.prebid.server.functional.model.request.auction.PrebidCache import org.prebid.server.functional.model.request.auction.PrebidStoredRequest import org.prebid.server.functional.model.request.auction.PriceGranularity import org.prebid.server.functional.model.request.auction.Range +import org.prebid.server.functional.model.request.auction.Site import org.prebid.server.functional.model.request.auction.StoredAuctionResponse import org.prebid.server.functional.model.request.auction.StoredBidResponse import org.prebid.server.functional.model.request.auction.Targeting @@ -1906,6 +1908,41 @@ class TargetingSpec extends BaseSpec { ] } + def "PBS amp shouldn't emit error for targeting when site is array"() { + given: "Create targeting with array of site" + def anyRandomValue = PBSUtils.randomString + def targeting = ["site": siteValue, "any": anyRandomValue] + + and: "Encode targeting to string" + def encodeTargeting = URLEncoder.encode(encode(targeting), StandardCharsets.UTF_8) + + and: "Amp request with targeting" + def ampRequest = AmpRequest.defaultAmpRequest.tap { + it.targeting = encodeTargeting + } + + and: "Default bid request" + def ampStoredRequest = BidRequest.defaultBidRequest + + and: "Create and save stored request into DB" + def storedRequest = StoredRequest.getStoredRequest(ampRequest, ampStoredRequest) + storedRequestDao.save(storedRequest) + + when: "PBS processes amp request" + def ampResponse = pbsWithDefaultTargetingLength.sendAmpRequest(ampRequest) + + then: "Amp response should contain value from targeting in imp.ext.data" + def bidderRequest = bidder.getBidderRequest(ampStoredRequest.id) + assert bidderRequest.imp[0].ext.data.any == anyRandomValue + + and: "Amp response shouldn't contain any errors" + assert !ampResponse.ext.errors + + where: + siteValue << [null, [], [PBSUtils.randomString], [Site.defaultSite], [Site.defaultSite, PBSUtils.randomString], + [PBSUtils.randomString, Site.defaultSite], [App.defaultApp, Site.defaultSite]] + } + private static Account createAccountWithPriceGranularity(String accountId, PriceGranularityType priceGranularity) { def accountAuctionConfig = new AccountAuctionConfig(priceGranularity: priceGranularity) def accountConfig = new AccountConfig(status: ACTIVE, auction: accountAuctionConfig)