@@ -167,12 +167,21 @@ class PrebidServerService implements ObjectMapperWrapper {
167167 }
168168
169169 SetuidResponse sendSetUidRequest (SetuidRequest request , UidsCookie uidsCookie , Map header = [:]) {
170- def uidsCookieAsJson = encode(uidsCookie)
171- def uidsCookieAsEncodedJson = Base64 . urlEncoder. encodeToString(uidsCookieAsJson. bytes)
172- def response = given(requestSpecification). cookie(UIDS_COOKIE_NAME , uidsCookieAsEncodedJson)
173- .queryParams(toMap(request))
174- .headers(header)
175- .get(SET_UID_ENDPOINT )
170+ sendSetUidRequest(request, [uidsCookie], header)
171+ }
172+
173+ SetuidResponse sendSetUidRequest (SetuidRequest request , List<UidsCookie > uidsCookies , Map header = [:]) {
174+ def cookies = uidsCookies. withIndex(). collectEntries { group , index ->
175+ def uidsCookieAsJson = encode(group)
176+ def uidsCookieAsEncodedJson = Base64 . urlEncoder. encodeToString(uidsCookieAsJson. bytes)
177+ [" ${ UIDS_COOKIE_NAME}${ index > 0 ? index + 1 : ''} " : uidsCookieAsEncodedJson]
178+ }
179+
180+ def response = given(requestSpecification)
181+ .cookies(cookies)
182+ .queryParams(toMap(request))
183+ .headers(header)
184+ .get(SET_UID_ENDPOINT )
176185
177186 checkResponseStatusCode(response)
178187
@@ -344,16 +353,32 @@ class PrebidServerService implements ObjectMapperWrapper {
344353 }
345354 }
346355
347- private static Map<String , String > getHeaders (Response response ) {
348- response. headers(). collectEntries { [it. name, it. value] }
356+ private static Map<String , List< String > > getHeaders (Response response ) {
357+ response. headers(). groupBy { it . name } . collectEntries { [( it. key): it. value * . value] }
349358 }
350359
351360 private static UidsCookie getDecodedUidsCookie (Response response ) {
352- def uids = response. detailedCookie(UIDS_COOKIE_NAME )?. value
353- if (uids) {
354- return decode(new String (Base64 . urlDecoder. decode(uids)), UidsCookie )
355- } else {
356- throw new IllegalStateException (" uids cookie is missing in response" )
361+ def sortedCookies = response. detailedCookies()
362+ .findAll { cookie -> ! (cookie =~ / \b uids\d *=\s *;/ ) }
363+ .sort { a , b ->
364+ def aMatch = (a. name =~ / uids(\d *)/ )[0 ]
365+ def bMatch = (b. name =~ / uids(\d *)/ )[0 ]
366+
367+ def aNumber = (aMatch?. getAt(1 ) ? aMatch[1 ]. toInteger() : 0 )
368+ def bNumber = (bMatch?. getAt(1 ) ? bMatch[1 ]. toInteger() : 0 )
369+
370+ aNumber <=> bNumber
371+ }
372+
373+ def decodedCookiesList = sortedCookies. collect { cookie ->
374+ def uid = (cookie =~ / uids\d *=(\S +?);/ )[0 ][1 ]
375+ decodeWithBase64(uid as String , UidsCookie )
376+ }
377+
378+ decodedCookiesList. inject(new UidsCookie ()) { uidsCookie , decodedCookie ->
379+ uidsCookie. uids = (uidsCookie. uids ?: new LinkedHashMap ()) + (decodedCookie. uids ?: new LinkedHashMap ())
380+ uidsCookie. tempUIDs = (uidsCookie. tempUIDs ?: new LinkedHashMap ()) + (decodedCookie. tempUIDs ?: new LinkedHashMap ())
381+ uidsCookie
357382 }
358383 }
359384
0 commit comments