diff --git a/src/test/groovy/org/prebid/server/functional/model/request/auction/ImpExt.groovy b/src/test/groovy/org/prebid/server/functional/model/request/auction/ImpExt.groovy index 55c626d7bd6..a9d72718e9a 100644 --- a/src/test/groovy/org/prebid/server/functional/model/request/auction/ImpExt.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/request/auction/ImpExt.groovy @@ -29,7 +29,7 @@ class ImpExt { String skadn String general @JsonProperty("igs") - List interestGroupAuctionSupports + InterestGroupAuctionSupport interestGroupAuctionSupports AnyUnsupportedBidder anyUnsupportedBidder static ImpExt getDefaultImpExt() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy index de5d742c6f4..6f69bdda378 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy @@ -872,7 +872,7 @@ class BidderParamsSpec extends BaseSpec { prebid.bidder.generic = null prebid.adUnitCode = PBSUtils.randomString generic = new Generic() - auctionEnvironment = PBSUtils.getRandomEnum(AuctionEnvironment) + auctionEnvironment = PBSUtils.getRandomEnum(AuctionEnvironment, [AuctionEnvironment.SERVER_ORCHESTRATED, AuctionEnvironment.UNKNOWN]) all = PBSUtils.randomNumber context = new ImpExtContext(data: new ImpExtContextData()) data = new ImpExtContextData(pbAdSlot: PBSUtils.randomString) @@ -1025,8 +1025,8 @@ class BidderParamsSpec extends BaseSpec { def "PBS should send request to bidder when adapters.bidder.aliases.bidder.meta-info.currency-accepted not specified"() { given: "PBS with adapter configuration" - def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + def pbsConfig = ["adapters.generic.aliases.alias.enabled" : "true", + "adapters.generic.aliases.alias.endpoint" : "$networkServiceContainer.rootUri/auction".toString(), "adapters.generic.aliases.alias.meta-info.currency-accepted": ""] def pbsService = pbsServiceFactory.getService(pbsConfig) @@ -1144,8 +1144,8 @@ class BidderParamsSpec extends BaseSpec { def "PBS should send request to bidder when adapters.bidder.aliases.bidder.meta-info.currency-accepted intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + def pbsConfig = ["adapters.generic.aliases.alias.enabled" : "true", + "adapters.generic.aliases.alias.endpoint" : "$networkServiceContainer.rootUri/auction".toString(), "adapters.generic.aliases.alias.meta-info.currency-accepted": "${USD},${EUR}".toString()] def pbsService = pbsServiceFactory.getService(pbsConfig) @@ -1188,8 +1188,8 @@ class BidderParamsSpec extends BaseSpec { def "PBS shouldn't send request to bidder and emit warning when adapters.bidder.aliases.bidder.meta-info.currency-accepted not intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + def pbsConfig = ["adapters.generic.aliases.alias.enabled" : "true", + "adapters.generic.aliases.alias.endpoint" : "$networkServiceContainer.rootUri/auction".toString(), "adapters.generic.aliases.alias.meta-info.currency-accepted": "${JPY},${CHF}".toString()] def pbsService = pbsServiceFactory.getService(pbsConfig) @@ -1242,7 +1242,7 @@ class BidderParamsSpec extends BaseSpec { def bidRequest = BidRequest.defaultBidRequest.tap { imp[0].ext.tap { auctionEnvironment = requestedAuctionEnvironment - interestGroupAuctionSupports = [new InterestGroupAuctionSupport(auctionEnvironment: null)] + interestGroupAuctionSupports = new InterestGroupAuctionSupport(auctionEnvironment: null) } } @@ -1252,7 +1252,7 @@ class BidderParamsSpec extends BaseSpec { then: "Bidder request should imp[].{ae/ext.igs.ae} same value as requested" def bidderRequest = bidder.getBidderRequest(bidRequest.id) assert bidderRequest.imp[0].ext.auctionEnvironment == requestedAuctionEnvironment - assert bidderRequest.imp[0].ext.interestGroupAuctionSupports[0].auctionEnvironment == requestedAuctionEnvironment + assert bidderRequest.imp[0].ext.interestGroupAuctionSupports.auctionEnvironment == requestedAuctionEnvironment where: requestedAuctionEnvironment << [NOT_SUPPORTED, DEVICE_ORCHESTRATED] @@ -1263,7 +1263,7 @@ class BidderParamsSpec extends BaseSpec { def bidRequest = BidRequest.defaultBidRequest.tap { imp[0].ext.tap { auctionEnvironment = requestedAuctionEnvironment - interestGroupAuctionSupports = [new InterestGroupAuctionSupport(auctionEnvironment: null)] + interestGroupAuctionSupports = new InterestGroupAuctionSupport(auctionEnvironment: null) } } @@ -1273,7 +1273,7 @@ class BidderParamsSpec extends BaseSpec { then: "Bidder request should imp[].ae same value as requested" def bidderRequest = bidder.getBidderRequest(bidRequest.id) assert bidderRequest.imp[0].ext.auctionEnvironment == requestedAuctionEnvironment - assert !bidderRequest.imp[0].ext.interestGroupAuctionSupports[0].auctionEnvironment + assert !bidderRequest.imp[0].ext.interestGroupAuctionSupports.auctionEnvironment where: requestedAuctionEnvironment << [SERVER_ORCHESTRATED, UNKNOWN] @@ -1281,12 +1281,12 @@ class BidderParamsSpec extends BaseSpec { def "PBS shouldn't change auction environment in imp.ext.igs when it is present in both imp.ext and imp.ext.igs"() { given: "Default bid request with populated imp.ext" - def extAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment) - def extIgsAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment) + def extAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment, [SERVER_ORCHESTRATED, UNKNOWN]) + def extIgsAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment, [SERVER_ORCHESTRATED, UNKNOWN]) def bidRequest = BidRequest.defaultBidRequest.tap { imp[0].ext.tap { auctionEnvironment = extAuctionEnv - interestGroupAuctionSupports = [new InterestGroupAuctionSupport(auctionEnvironment: extIgsAuctionEnv)] + interestGroupAuctionSupports = new InterestGroupAuctionSupport(auctionEnvironment: extIgsAuctionEnv) } } @@ -1296,6 +1296,6 @@ class BidderParamsSpec extends BaseSpec { then: "Bidder request should imp[].{ae/ext.igs.ae} same value as requested" def bidderRequest = bidder.getBidderRequest(bidRequest.id) assert bidderRequest.imp[0].ext.auctionEnvironment == extAuctionEnv - assert bidderRequest.imp[0].ext.interestGroupAuctionSupports[0].auctionEnvironment == extIgsAuctionEnv + assert bidderRequest.imp[0].ext.interestGroupAuctionSupports.auctionEnvironment == extIgsAuctionEnv } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/bidder/openx/OpenxSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/bidder/openx/OpenxSpec.groovy index 1adf84c32fd..8c9ea35568f 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/bidder/openx/OpenxSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/bidder/openx/OpenxSpec.groovy @@ -5,7 +5,9 @@ import org.prebid.server.functional.model.bidder.Openx import org.prebid.server.functional.model.config.AccountAuctionConfig import org.prebid.server.functional.model.config.AccountConfig import org.prebid.server.functional.model.db.Account +import org.prebid.server.functional.model.request.auction.AuctionEnvironment import org.prebid.server.functional.model.request.auction.BidRequest +import org.prebid.server.functional.model.request.auction.InterestGroupAuctionSupport import org.prebid.server.functional.model.request.auction.PaaFormat import org.prebid.server.functional.model.response.auction.InterestGroupAuctionBuyer import org.prebid.server.functional.model.response.auction.InterestGroupAuctionBuyerExt @@ -24,6 +26,7 @@ import java.time.Instant import static org.prebid.server.functional.model.bidder.BidderName.OPENX import static org.prebid.server.functional.model.bidder.BidderName.OPENX_ALIAS import static org.prebid.server.functional.model.bidder.BidderName.WILDCARD +import static org.prebid.server.functional.model.request.auction.AuctionEnvironment.* import static org.prebid.server.functional.model.request.auction.AuctionEnvironment.DEVICE_ORCHESTRATED import static org.prebid.server.functional.model.request.auction.AuctionEnvironment.NOT_SUPPORTED import static org.prebid.server.functional.model.request.auction.PaaFormat.IAB @@ -41,6 +44,13 @@ class OpenxSpec extends BaseSpec { @Shared PrebidServerService pbsService = pbsServiceFactory.getService(OPENX_CONFIG) + @Override + def cleanupSpec() { + pbsServiceFactory.removeContainer(OPENX_CONFIG) + pbsServiceFactory.removeContainer(OPENX_CONFIG + OPENX_ALIAS_CONFIG) + pbsServiceFactory.removeContainer(OPENX_ALIAS_CONFIG) + } + def "PBS should populate fledge config by default when bid response with fledge"() { given: "Default basic BidRequest with ae and openx bidder" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -534,4 +544,32 @@ class OpenxSpec extends BaseSpec { IAB | [new InterestGroupAuctionSeller()] | [new InterestGroupAuctionBuyer()] ORIGINAL | [] | [] } + + def "PBS shouldn't change auction environment in imp.ext.igs and not emit a warning when it is present in both imp.ext and imp.ext.igs"() { + given: "Default bid request with populated imp.ext" + def extAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment, [SERVER_ORCHESTRATED, UNKNOWN]) + def extIgsAuctionEnv = PBSUtils.getRandomEnum(AuctionEnvironment, [SERVER_ORCHESTRATED, UNKNOWN]) + def bidRequest = BidRequest.defaultBidRequest.tap { + imp[0].ext.prebid.bidder.openx = Openx.defaultOpenx + imp[0].ext.prebid.bidder.generic = null + imp[0].ext.tap { + auctionEnvironment = extAuctionEnv + interestGroupAuctionSupports = new InterestGroupAuctionSupport(auctionEnvironment: extIgsAuctionEnv) + } + } + + when: "PBS processes auction request" + def bidResponse = pbsService.sendAuctionRequest(bidRequest) + + then: "Bidder request should imp[].{ae/ext.igs.ae} same value as requested" + def bidderRequest = bidder.getBidderRequest(bidRequest.id) + assert bidderRequest.imp[0].ext.auctionEnvironment == extAuctionEnv + assert bidderRequest.imp[0].ext.interestGroupAuctionSupports.auctionEnvironment == extIgsAuctionEnv + + and: "Response shouldn't contain errors" + assert !bidResponse.ext.errors + + and: "Response shouldn't contain warnings" + assert !bidResponse.ext.warnings + } }