|
1 | 1 | package org.prebid.server.functional.tests |
2 | 2 |
|
| 3 | +import org.prebid.server.functional.model.bidder.AppNexus |
3 | 4 | import org.prebid.server.functional.model.bidder.Generic |
4 | 5 | import org.prebid.server.functional.model.bidder.Openx |
5 | 6 | import org.prebid.server.functional.model.request.auction.BidRequest |
6 | 7 | import org.prebid.server.functional.service.PrebidServerException |
7 | | -import org.prebid.server.functional.testcontainers.Dependencies |
8 | 8 | import org.prebid.server.functional.util.PBSUtils |
| 9 | +import spock.lang.Shared |
9 | 10 |
|
10 | 11 | import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST |
11 | 12 | import static org.prebid.server.functional.model.bidder.BidderName.ALIAS |
| 13 | +import static org.prebid.server.functional.model.bidder.BidderName.APPNEXUS |
12 | 14 | import static org.prebid.server.functional.model.bidder.BidderName.BOGUS |
13 | 15 | import static org.prebid.server.functional.model.bidder.BidderName.GENERIC |
14 | 16 | import static org.prebid.server.functional.model.bidder.BidderName.GENER_X |
15 | 17 | import static org.prebid.server.functional.model.bidder.BidderName.OPENX |
16 | 18 | import static org.prebid.server.functional.model.bidder.CompressionType.GZIP |
| 19 | +import static org.prebid.server.functional.model.response.auction.ErrorType.PREBID |
17 | 20 | import static org.prebid.server.functional.testcontainers.Dependencies.networkServiceContainer |
18 | 21 | import static org.prebid.server.functional.util.HttpUtil.CONTENT_ENCODING_HEADER |
19 | 22 |
|
20 | 23 | class AliasSpec extends BaseSpec { |
21 | 24 |
|
| 25 | + private static final Map<String, String> ADDITIONAL_BIDDERS_CONFIG = ["adapters.${OPENX.value}.enabled" : "true", |
| 26 | + "adapters.${OPENX.value}.endpoint" : "$networkServiceContainer.rootUri/${OPENX.value}/auction".toString(), |
| 27 | + "adapters.${APPNEXUS.value}.enabled" : "true", |
| 28 | + "adapters.${APPNEXUS.value}.endpoint": "$networkServiceContainer.rootUri/${APPNEXUS.value}/auction".toString()] |
| 29 | + @Shared |
| 30 | + private static pbsServiceWithAdditionalBidders |
| 31 | + |
| 32 | + def setupSpec() { |
| 33 | + pbsServiceWithAdditionalBidders = pbsServiceFactory.getService(ADDITIONAL_BIDDERS_CONFIG + GENERIC_ALIAS_CONFIG) |
| 34 | + } |
| 35 | + |
| 36 | + def cleanupSpec() { |
| 37 | + pbsServiceFactory.removeContainer(ADDITIONAL_BIDDERS_CONFIG + GENERIC_ALIAS_CONFIG) |
| 38 | + } |
| 39 | + |
22 | 40 | def "PBS should be able to take alias from request"() { |
23 | 41 | given: "Default bid request with alias" |
24 | 42 | def bidRequest = BidRequest.defaultBidRequest.tap { |
@@ -142,7 +160,7 @@ class AliasSpec extends BaseSpec { |
142 | 160 | } |
143 | 161 |
|
144 | 162 | when: "PBS processes auction request" |
145 | | - prebidServerService.sendAuctionRequest(bidRequest) |
| 163 | + pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest) |
146 | 164 |
|
147 | 165 | then: "Bidder request should contain request per-alies" |
148 | 166 | def bidderRequests = bidder.getBidderRequests(bidRequest.id) |
@@ -209,6 +227,53 @@ class AliasSpec extends BaseSpec { |
209 | 227 | pbsServiceFactory.removeContainer(pbsConfig) |
210 | 228 | } |
211 | 229 |
|
| 230 | + def "PBS should validate request as alias request and without any warnings when required properties in place"() { |
| 231 | + given: "Default bid request with openx and alias bidder" |
| 232 | + def bidRequest = BidRequest.defaultBidRequest.tap { |
| 233 | + imp[0].ext.prebid.bidder.appNexus = AppNexus.default |
| 234 | + imp[0].ext.prebid.bidder.generic = null |
| 235 | + ext.prebid.aliases = [(APPNEXUS.value): OPENX] |
| 236 | + } |
| 237 | + |
| 238 | + when: "PBS processes auction request" |
| 239 | + def bidResponse = pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest) |
| 240 | + |
| 241 | + then: "PBS contain http call for specific bidder" |
| 242 | + def responseDebug = bidResponse.ext.debug |
| 243 | + assert responseDebug.httpcalls.size() == 1 |
| 244 | + assert responseDebug.httpcalls[APPNEXUS.value]*.uri == ["$networkServiceContainer.rootUri/${APPNEXUS.value}/auction"] |
| 245 | + |
| 246 | + and: "PBS should not contain any warnings" |
| 247 | + assert !bidResponse.ext.warnings |
| 248 | + } |
| 249 | + |
| 250 | + def "PBS should validate request as alias request and emit proper warnings when validation fails for request"() { |
| 251 | + given: "Default bid request with openx and alias bidder" |
| 252 | + def bidRequest = BidRequest.defaultBidRequest.tap { |
| 253 | + imp[0].ext.prebid.bidder.appNexus = new AppNexus() |
| 254 | + imp[0].ext.prebid.bidder.generic = null |
| 255 | + ext.prebid.aliases = [(APPNEXUS.value): OPENX] |
| 256 | + } |
| 257 | + |
| 258 | + when: "PBS processes auction request" |
| 259 | + def bidResponse = pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest) |
| 260 | + |
| 261 | + then: "PBS shouldn't contain http calls" |
| 262 | + assert !bidResponse.ext.debug.httpcalls |
| 263 | + |
| 264 | + and: "Bid response should contain warning" |
| 265 | + assert bidResponse.ext.warnings[PREBID]?.code == [999, 999] |
| 266 | + assert bidResponse.ext?.warnings[PREBID]*.message == |
| 267 | + ["WARNING: request.imp[0].ext.prebid.bidder.${APPNEXUS.value} was dropped with a reason: " + |
| 268 | + "request.imp[0].ext.prebid.bidder.${APPNEXUS.value} failed validation.\n" + |
| 269 | + "\$.placement_id: is missing but it is required\n" + |
| 270 | + "\$.member: is missing but it is required\n" + |
| 271 | + "\$.placementId: is missing but it is required\n" + |
| 272 | + "\$.inv_code: is missing but it is required\n" + |
| 273 | + "\$.invCode: is missing but it is required", |
| 274 | + "WARNING: request.imp[0].ext must contain at least one valid bidder"] |
| 275 | + } |
| 276 | + |
212 | 277 | def "PBS should invoke as aliases when alias is unknown and core bidder is specified"() { |
213 | 278 | given: "Default bid request with generic and alias bidder" |
214 | 279 | def bidRequest = BidRequest.defaultBidRequest.tap { |
|
0 commit comments