11package org .prebid .server .hooks .modules .liveintent .omni .channel .identity .v1 ;
22
33import com .iab .openrtb .request .BidRequest ;
4+ import com .iab .openrtb .request .Device ;
45import com .iab .openrtb .request .Eid ;
6+ import com .iab .openrtb .request .Geo ;
7+ import com .iab .openrtb .request .Source ;
58import com .iab .openrtb .request .Uid ;
69import com .iab .openrtb .request .User ;
710import io .vertx .core .Future ;
1013import org .junit .jupiter .api .extension .ExtendWith ;
1114import org .mockito .Mock ;
1215import org .mockito .junit .jupiter .MockitoExtension ;
16+ import org .prebid .server .activity .Activity ;
17+ import org .prebid .server .activity .infrastructure .ActivityController ;
18+ import org .prebid .server .activity .infrastructure .ActivityInfrastructure ;
19+ import org .prebid .server .activity .infrastructure .debug .ActivityInfrastructureDebug ;
20+ import org .prebid .server .auction .model .AuctionContext ;
1321import org .prebid .server .auction .privacy .enforcement .mask .UserFpdActivityMask ;
1422import org .prebid .server .hooks .execution .v1 .auction .AuctionInvocationContextImpl ;
1523import org .prebid .server .hooks .execution .v1 .auction .AuctionRequestPayloadImpl ;
2735import org .prebid .server .vertx .httpclient .model .HttpClientResponse ;
2836
2937import java .util .List ;
38+ import java .util .Map ;
3039import java .util .concurrent .TimeoutException ;
3140
3241import static java .util .Collections .singletonList ;
@@ -51,6 +60,9 @@ public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest {
5160 @ Mock
5261 private HttpClient httpClient ;
5362
63+ @ Mock
64+ private ActivityInfrastructureDebug activityInfrastructureDebug ;
65+
5466 @ Mock (strictness = LENIENT )
5567 private LiveIntentOmniChannelProperties properties ;
5668
@@ -75,6 +87,169 @@ public void creationShouldFailOnInvalidIdentityUrl() {
7587 properties , userFpdActivityMask , MAPPER , httpClient , 0.01d ));
7688 }
7789
90+ @ Test
91+ public void geoPassingRestrictionShouldBeRespected () {
92+ // given
93+ final Geo givenGeo = Geo .builder ()
94+ .lat (52.51671856406936f )
95+ .lon (13.377639726342583f )
96+ .city ("Berlin" )
97+ .country ("Germany" )
98+ .build ();
99+ final Device givenDevice = Device .builder ()
100+ .geo (givenGeo )
101+ .ip ("192.168.127.12" )
102+ .ifa ("foo" )
103+ .macsha1 ("bar" )
104+ .macmd5 ("baz" )
105+ .dpidsha1 ("boo" )
106+ .dpidmd5 ("far" )
107+ .didsha1 ("zoo" )
108+ .didmd5 ("goo" )
109+ .build ();
110+ final BidRequest givenBidRequest = BidRequest .builder ().id ("request" ).device (givenDevice ).build ();
111+
112+ final Geo expectedGeo = givenGeo .toBuilder ()
113+ .country (null )
114+ .city (null )
115+ .lat (52.52f )
116+ .lon (13.38f )
117+ .build ();
118+ final Device expectedDevice = givenDevice .toBuilder ()
119+ .geo (expectedGeo )
120+ .ip ("192.168.127.0" )
121+ .ifa (null )
122+ .macsha1 (null )
123+ .macmd5 (null )
124+ .dpidsha1 (null )
125+ .dpidmd5 (null )
126+ .didsha1 (null )
127+ .didmd5 (null )
128+ .build ();
129+ final BidRequest expectedBidRequest = givenBidRequest .toBuilder ().device (expectedDevice ).build ();
130+
131+ final Eid expectedEid = Eid .builder ().source ("liveintent.com" ).build ();
132+
133+ final String responseBody = MAPPER .encodeToString (IdResResponse .of (List .of (expectedEid )));
134+ given (httpClient .post (any (), any (), any (), anyLong ()))
135+ .willReturn (Future .succeededFuture (HttpClientResponse .of (200 , null , responseBody )));
136+
137+ final ActivityController activityController = ActivityController .of (
138+ false , List .of (), activityInfrastructureDebug );
139+
140+ final ActivityInfrastructure givenActivityInfrastructure = new ActivityInfrastructure (
141+ Map .of (Activity .TRANSMIT_TID , activityController ,
142+ Activity .TRANSMIT_UFPD , activityController ),
143+ activityInfrastructureDebug );
144+
145+ final AuctionInvocationContext auctionInvocationContext = AuctionInvocationContextImpl .of (
146+ null ,
147+ AuctionContext .builder ().activityInfrastructure (givenActivityInfrastructure ).build (),
148+ false ,
149+ null ,
150+ null );
151+
152+ // when
153+ final InvocationResult <AuctionRequestPayload > result =
154+ target .call (AuctionRequestPayloadImpl .of (givenBidRequest ), auctionInvocationContext ).result ();
155+ // then
156+ assertThat (result .status ()).isEqualTo (InvocationStatus .success );
157+
158+ verify (httpClient ).post (
159+ eq ("https://test.com/idres" ),
160+ argThat (headers -> headers .contains ("Authorization" , "Bearer auth_token" , true )),
161+ eq (MAPPER .encodeToString (expectedBidRequest )),
162+ eq (5L ));
163+ }
164+
165+ @ Test
166+ public void tidPassingRestrictionShouldBeRespected () {
167+ // given
168+ final Source givenSource = Source .builder ().tid ("tid1" ).build ();
169+ final BidRequest givenBidRequest = BidRequest .builder ().id ("request" ).source (givenSource ).build ();
170+
171+ final Source expectedSource = givenSource .toBuilder ().tid (null ).build ();
172+ final BidRequest expectedBidRequest = givenBidRequest .toBuilder ().source (expectedSource ).build ();
173+
174+ final Eid expectedEid = Eid .builder ().source ("liveintent.com" ).build ();
175+
176+ final String responseBody = MAPPER .encodeToString (IdResResponse .of (List .of (expectedEid )));
177+ given (httpClient .post (any (), any (), any (), anyLong ()))
178+ .willReturn (Future .succeededFuture (HttpClientResponse .of (200 , null , responseBody )));
179+
180+ final ActivityController activityController = ActivityController .of (
181+ false , List .of (), activityInfrastructureDebug );
182+
183+ final ActivityInfrastructure givenActivityInfrastructure = new ActivityInfrastructure (
184+ Map .of (Activity .TRANSMIT_TID , activityController ,
185+ Activity .TRANSMIT_UFPD , activityController ),
186+ activityInfrastructureDebug );
187+
188+ final AuctionInvocationContext auctionInvocationContext = AuctionInvocationContextImpl .of (
189+ null ,
190+ AuctionContext .builder ().activityInfrastructure (givenActivityInfrastructure ).build (),
191+ false ,
192+ null ,
193+ null );
194+
195+ // when
196+ final InvocationResult <AuctionRequestPayload > result =
197+ target .call (AuctionRequestPayloadImpl .of (givenBidRequest ), auctionInvocationContext ).result ();
198+ // then
199+ assertThat (result .status ()).isEqualTo (InvocationStatus .success );
200+
201+ verify (httpClient ).post (
202+ eq ("https://test.com/idres" ),
203+ argThat (headers -> headers .contains ("Authorization" , "Bearer auth_token" , true )),
204+ eq (MAPPER .encodeToString (expectedBidRequest )),
205+ eq (5L ));
206+ }
207+
208+ @ Test
209+ public void eidPassingRestrictionShouldBeRespected () {
210+ // given
211+ final Uid givenUid = Uid .builder ().id ("id1" ).atype (2 ).build ();
212+ final Eid givenEid = Eid .builder ().source ("some.source.com" ).uids (singletonList (givenUid )).build ();
213+ final User givenUser = User .builder ().eids (singletonList (givenEid )).build ();
214+ final BidRequest givenBidRequest = BidRequest .builder ().id ("request" ).user (givenUser ).build ();
215+
216+ final User expectedUser = givenUser .toBuilder ().eids (null ).build ();
217+ final BidRequest expectedBidRequest = givenBidRequest .toBuilder ().user (expectedUser ).build ();
218+
219+ final Eid expectedEid = Eid .builder ().source ("liveintent.com" ).build ();
220+
221+ final String responseBody = MAPPER .encodeToString (IdResResponse .of (List .of (expectedEid )));
222+ given (httpClient .post (any (), any (), any (), anyLong ()))
223+ .willReturn (Future .succeededFuture (HttpClientResponse .of (200 , null , responseBody )));
224+
225+ final ActivityController activityController = ActivityController .of (
226+ false , List .of (), activityInfrastructureDebug );
227+
228+ final ActivityInfrastructure givenActivityInfrastructure = new ActivityInfrastructure (
229+ Map .of (Activity .TRANSMIT_EIDS , activityController ,
230+ Activity .TRANSMIT_UFPD , activityController ),
231+ activityInfrastructureDebug );
232+
233+ final AuctionInvocationContext auctionInvocationContext = AuctionInvocationContextImpl .of (
234+ null ,
235+ AuctionContext .builder ().activityInfrastructure (givenActivityInfrastructure ).build (),
236+ false ,
237+ null ,
238+ null );
239+
240+ // when
241+ final InvocationResult <AuctionRequestPayload > result =
242+ target .call (AuctionRequestPayloadImpl .of (givenBidRequest ), auctionInvocationContext ).result ();
243+ // then
244+ assertThat (result .status ()).isEqualTo (InvocationStatus .success );
245+
246+ verify (httpClient ).post (
247+ eq ("https://test.com/idres" ),
248+ argThat (headers -> headers .contains ("Authorization" , "Bearer auth_token" , true )),
249+ eq (MAPPER .encodeToString (expectedBidRequest )),
250+ eq (5L ));
251+ }
252+
78253 @ Test
79254 public void callShouldEnrichUserEidsWithRequestedEids () {
80255 // given
0 commit comments