|
36 | 36 | import org.prebid.server.vertx.httpclient.model.HttpClientResponse; |
37 | 37 |
|
38 | 38 | import java.util.List; |
| 39 | +import java.util.Set; |
39 | 40 | import java.util.concurrent.TimeoutException; |
40 | 41 |
|
41 | 42 | import static java.util.Collections.singletonList; |
@@ -74,11 +75,11 @@ public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest { |
74 | 75 |
|
75 | 76 | private LiveIntentOmniChannelIdentityProcessedAuctionRequestHook target; |
76 | 77 |
|
77 | | - private List<String> configuredBidders; |
| 78 | + private Set<String> configuredBidders; |
78 | 79 |
|
79 | 80 | @BeforeEach |
80 | 81 | public void setUp() { |
81 | | - configuredBidders = List.of("bidder1", "bidder2"); |
| 82 | + configuredBidders = Set.of("bidder1", "bidder2"); |
82 | 83 | given(properties.getRequestTimeoutMs()).willReturn(5L); |
83 | 84 | given(properties.getIdentityResolutionEndpoint()).willReturn("https://test.com/idres"); |
84 | 85 | given(properties.getAuthToken()).willReturn("auth_token"); |
@@ -375,14 +376,38 @@ public void callShouldReturnFailureWhenRequestingEidsIsFailed() { |
375 | 376 | } |
376 | 377 |
|
377 | 378 | @Test |
378 | | - public void biddersConfiguredRestrictionShouldBeRespected() { |
| 379 | + public void shouldRestrictExistingEidPermissionsByIntersectionAndKeepGlobalBiddersUnchanged() { |
| 380 | + // given |
379 | 381 | final Uid givenUid = Uid.builder().id("id1").atype(2).build(); |
380 | 382 | final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build(); |
381 | 383 | final User givenUser = User.builder().eids(singletonList(givenEid)).build(); |
382 | | - final BidRequest givenBidRequest = BidRequest.builder().id("request").user(givenUser).build(); |
383 | 384 |
|
384 | | - final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(configuredBidders, List.of( |
385 | | - ExtRequestPrebidDataEidPermissions.of("liveintent.com", configuredBidders))); |
| 385 | + final ExtRequestPrebidDataEidPermissions otherBidder = ExtRequestPrebidDataEidPermissions.builder() |
| 386 | + .source("some.other-source.com") |
| 387 | + .bidders(singletonList("bidderY")) |
| 388 | + .build(); |
| 389 | + |
| 390 | + final ExtRequestPrebidDataEidPermissions liBidder2 = ExtRequestPrebidDataEidPermissions.builder() |
| 391 | + .source("liveintent.com") |
| 392 | + .bidders(singletonList("bidder2")) |
| 393 | + .build(); |
| 394 | + final ExtRequestPrebidDataEidPermissions liBidder23 = ExtRequestPrebidDataEidPermissions.builder() |
| 395 | + .source("liveintent.com") |
| 396 | + .bidders(List.of("bidder2", "bidder3")) |
| 397 | + .build(); |
| 398 | + |
| 399 | + final ExtRequestPrebidData givenData = ExtRequestPrebidData.of(singletonList("bidderX"), |
| 400 | + List.of(otherBidder, liBidder23)); |
| 401 | + |
| 402 | + final BidRequest givenBidRequest = BidRequest.builder() |
| 403 | + .id("request") |
| 404 | + .user(givenUser) |
| 405 | + .ext(ExtRequest.of(ExtRequestPrebid.builder().data(givenData).build())) |
| 406 | + .build(); |
| 407 | + |
| 408 | + final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of( |
| 409 | + List.of("bidderX"), |
| 410 | + List.of(otherBidder, liBidder2)); |
386 | 411 |
|
387 | 412 | final Eid expectedEid = Eid.builder().source("liveintent.com").build(); |
388 | 413 |
|
@@ -418,23 +443,31 @@ public void biddersConfiguredRestrictionShouldBeRespected() { |
418 | 443 | } |
419 | 444 |
|
420 | 445 | @Test |
421 | | - public void biddersConfiguredRestrictionShouldBeMergedWithProvided() { |
| 446 | + public void shouldNotAddNewEidPermissionsOrModifyGlobalBiddersWhenSourceNotPresent() { |
422 | 447 | // given |
423 | 448 | final Uid givenUid = Uid.builder().id("id1").atype(2).build(); |
424 | 449 | final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build(); |
425 | 450 | 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(); |
| 451 | + final ExtRequestPrebidDataEidPermissions bidder1 = ExtRequestPrebidDataEidPermissions.builder() |
| 452 | + .source("some.other-source.com") |
| 453 | + .bidders(singletonList("bidder3")) |
| 454 | + .build(); |
| 455 | + final ExtRequestPrebidDataEidPermissions bidder2 = ExtRequestPrebidDataEidPermissions.builder() |
| 456 | + .source("some.source.com") |
| 457 | + .bidders(singletonList("bidder3")) |
| 458 | + .build(); |
431 | 459 |
|
432 | | - final List<String> expectedBidders = List.of("bidder3", "bidder2", "bidder1"); |
| 460 | + final List<ExtRequestPrebidDataEidPermissions> bidders = List.of(bidder1, bidder2); |
433 | 461 |
|
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))); |
| 462 | + final BidRequest givenBidRequest = BidRequest.builder() |
| 463 | + .id("request") |
| 464 | + .user(givenUser) |
| 465 | + .ext(ExtRequest.of(ExtRequestPrebid.builder() |
| 466 | + .data(ExtRequestPrebidData.of(singletonList("bidder3"), bidders)) |
| 467 | + .build())) |
| 468 | + .build(); |
| 469 | + |
| 470 | + final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(List.of("bidder3"), bidders); |
438 | 471 |
|
439 | 472 | final Eid expectedEid = Eid.builder().source("liveintent.com").build(); |
440 | 473 |
|
@@ -468,4 +501,69 @@ public void biddersConfiguredRestrictionShouldBeMergedWithProvided() { |
468 | 501 | eq(MAPPER.encodeToString(givenBidRequest)), |
469 | 502 | eq(5L)); |
470 | 503 | } |
| 504 | + |
| 505 | + @Test |
| 506 | + public void shouldRemovePermissionWhenIntersectionIsEmpty() { |
| 507 | + // given |
| 508 | + final Uid givenUid = Uid.builder().id("id1").atype(2).build(); |
| 509 | + final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build(); |
| 510 | + final User givenUser = User.builder().eids(singletonList(givenEid)).build(); |
| 511 | + |
| 512 | + final ExtRequestPrebidData givenData = ExtRequestPrebidData.of( |
| 513 | + List.of("bidderGlobal"), |
| 514 | + List.of( |
| 515 | + ExtRequestPrebidDataEidPermissions.builder() |
| 516 | + .source("liveintent.com") |
| 517 | + .bidders(singletonList("not-allowed")) |
| 518 | + .build(), |
| 519 | + ExtRequestPrebidDataEidPermissions.builder() |
| 520 | + .source("keep.com") |
| 521 | + .bidders(singletonList("bidderGlobal")) |
| 522 | + .build())); |
| 523 | + |
| 524 | + final BidRequest givenBidRequest = BidRequest.builder() |
| 525 | + .id("request") |
| 526 | + .user(givenUser) |
| 527 | + .ext(ExtRequest.of(ExtRequestPrebid.builder().data(givenData).build())) |
| 528 | + .build(); |
| 529 | + |
| 530 | + final Eid expectedEid = Eid.builder().source("liveintent.com").build(); |
| 531 | + final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid))); |
| 532 | + given(httpClient.post(any(), any(), any(), anyLong())) |
| 533 | + .willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody))); |
| 534 | + |
| 535 | + given(auctionInvocationContext.auctionContext()).willReturn(auctionContext); |
| 536 | + given(auctionContext.getActivityInfrastructure()).willReturn(activityInfrastructure); |
| 537 | + given(activityInfrastructure.isAllowed(any(), any())).willReturn(true); |
| 538 | + given(userFpdActivityMask.maskUser(any(), eq(false), eq(false))) |
| 539 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 540 | + given(userFpdActivityMask.maskDevice(any(), eq(false), eq(false))) |
| 541 | + .willAnswer(invocation -> invocation.getArgument(0)); |
| 542 | + |
| 543 | + // when |
| 544 | + final InvocationResult<AuctionRequestPayload> result = |
| 545 | + target.call(AuctionRequestPayloadImpl.of(givenBidRequest), auctionInvocationContext).result(); |
| 546 | + |
| 547 | + // then |
| 548 | + final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of( |
| 549 | + List.of("bidderGlobal"), |
| 550 | + List.of(ExtRequestPrebidDataEidPermissions.builder() |
| 551 | + .source("keep.com") |
| 552 | + .bidders(singletonList("bidderGlobal")) |
| 553 | + .build())); |
| 554 | + |
| 555 | + assertThat(result.status()).isEqualTo(InvocationStatus.success); |
| 556 | + assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest))) |
| 557 | + .extracting(AuctionRequestPayload::bidRequest) |
| 558 | + .extracting(BidRequest::getExt) |
| 559 | + .extracting(ExtRequest::getPrebid) |
| 560 | + .extracting(ExtRequestPrebid::getData) |
| 561 | + .isEqualTo(expectedData); |
| 562 | + |
| 563 | + verify(httpClient).post( |
| 564 | + eq("https://test.com/idres"), |
| 565 | + argThat(headers -> headers.contains("Authorization", "Bearer auth_token", true)), |
| 566 | + eq(MAPPER.encodeToString(givenBidRequest)), |
| 567 | + eq(5L)); |
| 568 | + } |
471 | 569 | } |
0 commit comments