From 0e08713aea195ff0447770ceda2f309120a1651b Mon Sep 17 00:00:00 2001 From: Viktor Kryshtal Date: Thu, 16 Jul 2026 15:29:06 +0300 Subject: [PATCH] Allowed duplicate cookie family names for priority sync --- .../cookie/PrioritizedCoopSyncProvider.java | 14 +++++-------- .../PrioritizedCoopSyncProviderTest.java | 20 ++++++++++++++++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/prebid/server/cookie/PrioritizedCoopSyncProvider.java b/src/main/java/org/prebid/server/cookie/PrioritizedCoopSyncProvider.java index 7ee18499527..cd8e33295aa 100644 --- a/src/main/java/org/prebid/server/cookie/PrioritizedCoopSyncProvider.java +++ b/src/main/java/org/prebid/server/cookie/PrioritizedCoopSyncProvider.java @@ -11,11 +11,9 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; public class PrioritizedCoopSyncProvider { @@ -23,14 +21,13 @@ public class PrioritizedCoopSyncProvider { private static final Logger logger = LoggerFactory.getLogger(PrioritizedCoopSyncProvider.class); private final Set prioritizedBidders; - private final Map prioritizedCookieFamilyNameToBidderName; + private final Set prioritizedCookieFamilies; public PrioritizedCoopSyncProvider(Set bidders, BidderCatalog bidderCatalog) { this.prioritizedBidders = validCoopSyncBidders(Objects.requireNonNull(bidders), bidderCatalog); - this.prioritizedCookieFamilyNameToBidderName = prioritizedBidders.stream() - .collect(Collectors.toMap( - bidder -> bidderCatalog.cookieFamilyName(bidder).orElseThrow(), - Function.identity())); + this.prioritizedCookieFamilies = prioritizedBidders.stream() + .map(bidder -> bidderCatalog.cookieFamilyName(bidder).orElseThrow()) + .collect(Collectors.toSet()); } private static Set validCoopSyncBidders(Set bidders, BidderCatalog bidderCatalog) { @@ -71,7 +68,6 @@ public Set prioritizedBidders(Account account) { } public boolean isPrioritizedFamily(String cookieFamilyName) { - final String bidder = prioritizedCookieFamilyNameToBidderName.get(cookieFamilyName); - return prioritizedBidders.contains(bidder); + return prioritizedCookieFamilies.contains(cookieFamilyName); } } diff --git a/src/test/java/org/prebid/server/cookie/PrioritizedCoopSyncProviderTest.java b/src/test/java/org/prebid/server/cookie/PrioritizedCoopSyncProviderTest.java index a6e24bed906..7ff551bfd9a 100644 --- a/src/test/java/org/prebid/server/cookie/PrioritizedCoopSyncProviderTest.java +++ b/src/test/java/org/prebid/server/cookie/PrioritizedCoopSyncProviderTest.java @@ -19,6 +19,7 @@ import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNoException; import static org.mockito.BDDMockito.given; import static org.mockito.Mock.Strictness.LENIENT; @@ -47,6 +48,18 @@ public void creationShouldFilterInvalidPrioritizedBidders() { assertThat(result).containsExactly("valid"); } + @Test + public void creationShouldAllowMultipleBiddersWithTheSameCookieFamilyName() { + // given + givenValidBidderWithCookieSync("bidder1", "cookie-family-name"); + givenValidBidderWithCookieSync("bidder2", "cookie-family-name"); + given(bidderCatalog.usersyncReadyBidders()).willReturn(Set.of("bidder1", "bidder2")); + + // when and then + assertThatNoException().isThrownBy(() -> + new PrioritizedCoopSyncProvider(Set.of("bidder1", "bidder2"), bidderCatalog)); + } + @Test public void prioritizedBiddersShouldReturnSetWithPrioritizedBiddersFromAccount() { // given @@ -99,9 +112,14 @@ private void givenValidBiddersWithCookieSync(String... bidders) { } private void givenValidBidderWithCookieSync(String bidder) { + givenValidBidderWithCookieSync(bidder, null); + } + + private void givenValidBidderWithCookieSync(String bidder, String cookieFamilyName) { given(bidderCatalog.isValidName(bidder)).willReturn(true); given(bidderCatalog.isActive(bidder)).willReturn(true); - given(bidderCatalog.cookieFamilyName(bidder)).willReturn(Optional.of(bidder + "-cookie-family")); + given(bidderCatalog.cookieFamilyName(bidder)) + .willReturn(Optional.ofNullable(cookieFamilyName).or(() -> Optional.of(bidder + "-cookie-family"))); given(bidderCatalog.usersyncerByName(bidder)).willReturn( Optional.of(Usersyncer.of( "cookie-family-name",