|
28 | 28 | import org.prebid.server.hooks.v1.auction.AuctionRequestPayload; |
29 | 29 | import org.prebid.server.json.JacksonMapper; |
30 | 30 | import org.prebid.server.json.ObjectMapperProvider; |
| 31 | +import org.prebid.server.proto.openrtb.ext.request.ExtRequest; |
| 32 | +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; |
| 33 | +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidData; |
| 34 | +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidDataEidPermissions; |
31 | 35 | import org.prebid.server.vertx.httpclient.HttpClient; |
32 | 36 | import org.prebid.server.vertx.httpclient.model.HttpClientResponse; |
33 | 37 |
|
@@ -70,12 +74,16 @@ public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest { |
70 | 74 |
|
71 | 75 | private LiveIntentOmniChannelIdentityProcessedAuctionRequestHook target; |
72 | 76 |
|
| 77 | + private List<String> configuredBidders; |
| 78 | + |
73 | 79 | @BeforeEach |
74 | 80 | public void setUp() { |
| 81 | + configuredBidders = List.of("bidder1", "bidder2"); |
75 | 82 | given(properties.getRequestTimeoutMs()).willReturn(5L); |
76 | 83 | given(properties.getIdentityResolutionEndpoint()).willReturn("https://test.com/idres"); |
77 | 84 | given(properties.getAuthToken()).willReturn("auth_token"); |
78 | 85 | given(properties.getTreatmentRate()).willReturn(1.0f); |
| 86 | + given(properties.getTargetBidders()).willReturn(configuredBidders); |
79 | 87 |
|
80 | 88 | target = new LiveIntentOmniChannelIdentityProcessedAuctionRequestHook( |
81 | 89 | properties, userFpdActivityMask, MAPPER, httpClient, 0.01d); |
@@ -365,4 +373,99 @@ public void callShouldReturnFailureWhenRequestingEidsIsFailed() { |
365 | 373 | .isInstanceOf(TimeoutException.class) |
366 | 374 | .hasMessage("Timeout exceeded"); |
367 | 375 | } |
| 376 | + |
| 377 | + @Test |
| 378 | + public void biddersConfiguredRestrictionShouldBeRespected() { |
| 379 | + final Uid givenUid = Uid.builder().id("id1").atype(2).build(); |
| 380 | + final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build(); |
| 381 | + final User givenUser = User.builder().eids(singletonList(givenEid)).build(); |
| 382 | + final BidRequest givenBidRequest = BidRequest.builder().id("request").user(givenUser).build(); |
| 383 | + |
| 384 | + final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(configuredBidders, List.of( |
| 385 | + ExtRequestPrebidDataEidPermissions.of("liveintent.com", configuredBidders))); |
| 386 | + |
| 387 | + final Eid expectedEid = Eid.builder().source("liveintent.com").build(); |
| 388 | + |
| 389 | + final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid))); |
| 390 | + given(httpClient.post(any(), any(), any(), anyLong())) |
| 391 | + .willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody))); |
| 392 | + |
| 393 | + given(auctionInvocationContext.auctionContext()).willReturn(auctionContext); |
| 394 | + given(auctionContext.getActivityInfrastructure()).willReturn(activityInfrastructure); |
| 395 | + given(activityInfrastructure.isAllowed(any(), any())).willReturn(true); |
| 396 | + given(userFpdActivityMask.maskUser(any(), eq(false), eq(false))) |
| 397 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 398 | + given(userFpdActivityMask.maskDevice(any(), eq(false), eq(false))) |
| 399 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 400 | + |
| 401 | + // when |
| 402 | + final InvocationResult<AuctionRequestPayload> result = |
| 403 | + target.call(AuctionRequestPayloadImpl.of(givenBidRequest), auctionInvocationContext).result(); |
| 404 | + // then |
| 405 | + assertThat(result.status()).isEqualTo(InvocationStatus.success); |
| 406 | + assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest))) |
| 407 | + .extracting(AuctionRequestPayload::bidRequest) |
| 408 | + .extracting(BidRequest::getExt) |
| 409 | + .extracting(ExtRequest::getPrebid) |
| 410 | + .extracting(ExtRequestPrebid::getData) |
| 411 | + .isEqualTo(expectedData); |
| 412 | + |
| 413 | + verify(httpClient).post( |
| 414 | + eq("https://test.com/idres"), |
| 415 | + argThat(headers -> headers.contains("Authorization", "Bearer auth_token", true)), |
| 416 | + eq(MAPPER.encodeToString(givenBidRequest)), |
| 417 | + eq(5L)); |
| 418 | + } |
| 419 | + |
| 420 | + @Test |
| 421 | + public void biddersConfiguredRestrictionShouldBeMergedWithProvided() { |
| 422 | + // given |
| 423 | + final Uid givenUid = Uid.builder().id("id1").atype(2).build(); |
| 424 | + final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build(); |
| 425 | + final User givenUser = User.builder().eids(singletonList(givenEid)).build(); |
| 426 | + final BidRequest givenBidRequest = BidRequest.builder().id("request").user(givenUser).ext(ExtRequest.of( |
| 427 | + ExtRequestPrebid.builder().data(ExtRequestPrebidData.of(List.of("bidder3"), List.of( |
| 428 | + ExtRequestPrebidDataEidPermissions.of("some.other-source.com", List.of("bidder3")), |
| 429 | + ExtRequestPrebidDataEidPermissions.of("some.source.com", List.of("bidder3")))) |
| 430 | + ).build())).build(); |
| 431 | + |
| 432 | + final List<String> expectedBidders = List.of("bidder3", "bidder2", "bidder1"); |
| 433 | + |
| 434 | + final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(expectedBidders, List.of( |
| 435 | + ExtRequestPrebidDataEidPermissions.of("some.other-source.com", List.of("bidder3")), |
| 436 | + ExtRequestPrebidDataEidPermissions.of("some.source.com", List.of("bidder3")), |
| 437 | + ExtRequestPrebidDataEidPermissions.of("liveintent.com", configuredBidders))); |
| 438 | + |
| 439 | + final Eid expectedEid = Eid.builder().source("liveintent.com").build(); |
| 440 | + |
| 441 | + final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid))); |
| 442 | + given(httpClient.post(any(), any(), any(), anyLong())) |
| 443 | + .willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody))); |
| 444 | + |
| 445 | + given(auctionInvocationContext.auctionContext()).willReturn(auctionContext); |
| 446 | + given(auctionContext.getActivityInfrastructure()).willReturn(activityInfrastructure); |
| 447 | + given(activityInfrastructure.isAllowed(any(), any())).willReturn(true); |
| 448 | + given(userFpdActivityMask.maskUser(any(), eq(false), eq(false))) |
| 449 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 450 | + given(userFpdActivityMask.maskDevice(any(), eq(false), eq(false))) |
| 451 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 452 | + |
| 453 | + // when |
| 454 | + final InvocationResult<AuctionRequestPayload> result = |
| 455 | + target.call(AuctionRequestPayloadImpl.of(givenBidRequest), auctionInvocationContext).result(); |
| 456 | + // then |
| 457 | + assertThat(result.status()).isEqualTo(InvocationStatus.success); |
| 458 | + assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest))) |
| 459 | + .extracting(AuctionRequestPayload::bidRequest) |
| 460 | + .extracting(BidRequest::getExt) |
| 461 | + .extracting(ExtRequest::getPrebid) |
| 462 | + .extracting(ExtRequestPrebid::getData) |
| 463 | + .isEqualTo(expectedData); |
| 464 | + |
| 465 | + verify(httpClient).post( |
| 466 | + eq("https://test.com/idres"), |
| 467 | + argThat(headers -> headers.contains("Authorization", "Bearer auth_token", true)), |
| 468 | + eq(MAPPER.encodeToString(givenBidRequest)), |
| 469 | + eq(5L)); |
| 470 | + } |
368 | 471 | } |
0 commit comments