44import com .fasterxml .jackson .databind .node .ObjectNode ;
55import com .iab .openrtb .request .Banner ;
66import com .iab .openrtb .request .BidRequest ;
7+ import com .iab .openrtb .request .Device ;
78import com .iab .openrtb .request .Imp ;
89import com .iab .openrtb .request .Site ;
910import com .iab .openrtb .response .Bid ;
@@ -42,37 +43,109 @@ void creationShouldFailOnInvalidEndpointUrl() {
4243
4344 @ Test
4445 void makeHttpRequestsShouldReturnErrorForInvalidImpExt () {
45-
46- final ObjectNode extNode = new ObjectMapper ().createObjectNode ();
46+ // given
47+ final ObjectNode extNode = jacksonMapper . mapper ().createObjectNode ();
4748 extNode .put ("bidder" , "invalid" );
4849
4950 final BidRequest bidRequest = BidRequest .builder ()
5051 .imp (List .of (Imp .builder ().id ("1" ).ext (extNode ).build ()))
5152 .build ();
5253
54+ // when
5355 final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
5456
57+ // then
5558 assertThat (result .getErrors ()).isNotEmpty ();
5659 assertThat (result .getErrors ().get (0 ).getMessage ())
5760 .contains ("Missing or invalid bidder ext" );
5861 }
5962
6063 @ Test
61- void makeHttpRequestsShouldBuildValidHttpRequests () {
62- final ObjectMapper mapper = new ObjectMapper ();
64+ void makeHttpRequestsShouldBuildValidHttpRequestsUrl () {
65+ // given
66+ final BidRequest bidRequest = createBidRequestWithBannerAndVideo ();
67+
68+ // when
69+ final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
70+
71+ // then
72+ assertThat (result .getErrors ()).isEmpty ();
73+ result .getValue ().forEach (req -> assertThat (req .getUri ()).isEqualTo (ENDPOINT_URL ));
74+ }
75+
76+ @ Test
77+ void makeHttpRequestsShouldBuildValidHttpRequestsHeaders () {
78+ // given
79+ final BidRequest bidRequest = createBidRequestWithBannerAndVideo ();
80+
81+ // when
82+ final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
83+
84+ // then
85+ result .getValue ().forEach (req -> assertThat (req .getHeaders ()).isNotEmpty ());
86+ }
87+
88+ @ Test
89+ void makeHttpRequestsShouldBuildValidHttpRequestsImpIds () {
90+ // given
91+ final BidRequest bidRequest = createBidRequestWithBannerAndVideo ();
92+
93+ // when
94+ final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
95+
96+ // then
97+ assertThat (result .getValue ().get (0 ).getImpIds ()).contains ("imp-1" );
98+ assertThat (result .getValue ().get (1 ).getImpIds ()).contains ("imp-2" );
99+ }
100+
101+ @ Test
102+ void makeHttpRequestsShouldBuildValidHttpRequestsImpContent () {
103+ // given
104+ final BidRequest bidRequest = createBidRequestWithBannerAndVideo ();
105+
106+ // when
107+ final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
108+
109+ // then
110+ final HttpRequest <AlvadsRequestOrtb > req1 = result .getValue ().get (0 );
111+ final HttpRequest <AlvadsRequestOrtb > req2 = result .getValue ().get (1 );
112+
113+ assertThat (req1 .getPayload ().getImp ().get (0 ).getBanner ()).isNotNull ();
114+ assertThat (req1 .getPayload ().getImp ().get (0 ).getVideo ()).isNull ();
115+
116+ assertThat (req2 .getPayload ().getImp ().get (0 ).getVideo ()).isNotNull ();
117+ assertThat (req2 .getPayload ().getImp ().get (0 ).getBanner ()).isNull ();
118+ }
119+
120+ @ Test
121+ void makeHttpRequestsShouldBuildValidHttpRequestsSiteAndOtherFields () {
122+ // given
123+ final BidRequest bidRequest = createBidRequestWithBannerAndVideo ();
124+
125+ // when
126+ final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
127+
128+ // then
129+ assertThat (result .getValue ().get (0 ).getPayload ().getId ()).isEqualTo ("req-123" );
130+ assertThat (result .getValue ().get (1 ).getPayload ().getId ()).isEqualTo ("req-123" );
63131
64- final ObjectNode bidderNode1 = mapper .createObjectNode ();
132+ assertThat (result .getValue ().get (0 ).getPayload ().getSite ()).isNotNull ();
133+ assertThat (result .getValue ().get (1 ).getPayload ().getSite ()).isNotNull ();
134+ }
135+
136+ private static BidRequest createBidRequestWithBannerAndVideo () {
137+ final ObjectNode bidderNode1 = new ObjectMapper ().createObjectNode ();
65138 bidderNode1 .put ("publisherUniqueId" , "pub-1" );
66- bidderNode1 .put ("endPointUrl " , ENDPOINT_URL );
139+ bidderNode1 .put ("endpointUrl " , ENDPOINT_URL );
67140
68- final ObjectNode impExtNode1 = mapper .createObjectNode ();
141+ final ObjectNode impExtNode1 = new ObjectMapper () .createObjectNode ();
69142 impExtNode1 .set ("bidder" , bidderNode1 );
70143
71- final ObjectNode bidderNode2 = mapper .createObjectNode ();
144+ final ObjectNode bidderNode2 = new ObjectMapper () .createObjectNode ();
72145 bidderNode2 .put ("publisherUniqueId" , "pub-2" );
73- bidderNode2 .put ("endPointUrl " , ENDPOINT_URL );
146+ bidderNode2 .put ("endpointUrl " , ENDPOINT_URL );
74147
75- final ObjectNode impExtNode2 = mapper .createObjectNode ();
148+ final ObjectNode impExtNode2 = new ObjectMapper () .createObjectNode ();
76149 impExtNode2 .set ("bidder" , bidderNode2 );
77150
78151 final Imp imp1 = Imp .builder ()
@@ -87,46 +160,20 @@ void makeHttpRequestsShouldBuildValidHttpRequests() {
87160 .ext (impExtNode2 )
88161 .build ();
89162
90- final Site site = Site .builder ()
91- .page ("https://example.com" )
92- .build ();
163+ final Site site = Site .builder ().page ("https://example.com" ).build ();
93164
94- final BidRequest bidRequest = BidRequest .builder ()
165+ return BidRequest .builder ()
95166 .id ("req-123" )
96167 .imp (List .of (imp1 , imp2 ))
97168 .site (site )
98- .device (com . iab . openrtb . request . Device .builder ().build ())
169+ .device (Device .builder ().build ())
99170 .build ();
100-
101- final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
102-
103- assertThat (result .getErrors ()).isEmpty ();
104- assertThat (result .getValue ()).hasSize (2 );
105-
106- final HttpRequest <AlvadsRequestOrtb > request1 = result .getValue ().get (0 );
107- final HttpRequest <AlvadsRequestOrtb > request2 = result .getValue ().get (1 );
108-
109- assertThat (request1 .getUri ()).isEqualTo (ENDPOINT_URL );
110- assertThat (request2 .getUri ()).isEqualTo (ENDPOINT_URL );
111-
112- assertThat (request1 .getHeaders ()).isNotEmpty ();
113- assertThat (request2 .getHeaders ()).isNotEmpty ();
114-
115- assertThat (request1 .getImpIds ()).contains ("imp-1" );
116- assertThat (request2 .getImpIds ()).contains ("imp-2" );
117-
118- assertThat (request1 .getPayload ().getImp ().get (0 ).getBanner ()).isNotNull ();
119- assertThat (request1 .getPayload ().getImp ().get (0 ).getVideo ()).isNull ();
120-
121- assertThat (request2 .getPayload ().getImp ().get (0 ).getVideo ()).isNotNull ();
122- assertThat (request2 .getPayload ().getImp ().get (0 ).getBanner ()).isNull ();
123-
124- assertThat (request1 .getPayload ().getId ()).isEqualTo ("req-123" );
125- assertThat (request2 .getPayload ().getId ()).isEqualTo ("req-123" );
126171 }
127172
173+ // ---- makeBids tests ----
128174 @ Test
129175 void makeBidsShouldReturnEmptyListForEmptyResponse () {
176+ // given
130177 final BidResponse bidResponse = BidResponse .builder ().build ();
131178 final HttpResponse response = HttpResponse .of (
132179 200 ,
@@ -140,43 +187,54 @@ void makeBidsShouldReturnEmptyListForEmptyResponse() {
140187 null
141188 );
142189
190+ // when
143191 final Result <List <BidderBid >> result = target .makeBids (call , BidRequest .builder ().build ());
144192
193+ // then
145194 assertThat (result .getValue ()).isEmpty ();
146195 }
147196
148197 @ Test
149- void makeBidsShouldReturnBidderBids () {
150- // GIVEN
151- final String impId = "AE_AD_1748977459403" ;
152- final String publisherId = "D7DACCE3-C23D-4AB9-8FE6-9FF41BF32F8F" ;
198+ void makeBidsShouldReturnBidderBidsWithFullFields () {
199+ // given
200+ final Imp bannerImp = createImp ("imp-banner" , "pub-1" , 300 , 250 );
201+ final Imp videoImp = createImp ("imp-video" , "pub-2" , 640 , 480 );
202+
203+ final BidRequest bidRequest = createBidRequest (List .of (bannerImp , videoImp ));
153204
154- final Bid bid = createBid ("bid1" , impId , 1 );
155- final SeatBid seatBid = createSeatBid (bid );
205+ final Bid bannerBid = createBid ("bid-banner" , "imp-banner" , 1.5 );
206+ final Bid videoBid = createBid ("bid-video" , "imp-video" , 2.5 );
207+
208+ final SeatBid seatBid = createSeatBid (bannerBid , videoBid );
156209 final BidResponse bidResponse = createBidResponse (List .of (seatBid ), "USD" );
157210
158- final HttpResponse response = HttpResponse .of (
211+ final HttpResponse httpResponse = HttpResponse .of (
159212 200 ,
160213 MultiMap .caseInsensitiveMultiMap (),
161214 jacksonMapper .encodeToString (bidResponse )
162215 );
163216
164- final Imp imp = createImp (impId , publisherId , 320 , 100 );
165- final BidRequest bidRequest = createBidRequest (List .of (imp ));
166-
167- final AlvadsRequestOrtb alvadsRequest = createAlvadsRequest (impId , 320 , 100 );
168- final HttpRequest <AlvadsRequestOrtb > httpRequest = HttpRequest .<AlvadsRequestOrtb >builder ()
169- .payload (alvadsRequest )
217+ final HttpRequest <AlvadsRequestOrtb > request = HttpRequest .<AlvadsRequestOrtb >builder ()
218+ .payload (createAlvadsRequest ("imp-banner" , 300 , 250 ))
170219 .build ();
171220
172- final BidderCall <AlvadsRequestOrtb > call = BidderCall .succeededHttp (httpRequest , response , null );
173-
174- // WHEN
175- final Result <List <BidderBid >> result = target .makeBids (call , bidRequest );
221+ // when
222+ final Result <List <BidderBid >> result = target .makeBids (
223+ BidderCall .succeededHttp (request , httpResponse , null ),
224+ bidRequest
225+ );
176226
177- // THEN
178- assertThat (result .getValue ()).hasSize (1 );
179- assertThat (result .getValue ().get (0 ).getBid ().getId ()).isEqualTo ("bid1" );
227+ // then - banner bid
228+ final BidderBid bannerBidderBid = result .getValue ().stream ()
229+ .filter (b -> b .getBid ().getImpid ().equals ("imp-banner" ))
230+ .findFirst ()
231+ .orElseThrow ();
232+
233+ // then - video bid
234+ final BidderBid videoBidderBid = result .getValue ().stream ()
235+ .filter (b -> b .getBid ().getImpid ().equals ("imp-video" ))
236+ .findFirst ()
237+ .orElseThrow ();
180238 }
181239
182240 private static Bid createBid (String id , String impId , double price ) {
@@ -208,6 +266,7 @@ private static Imp createImp(String id, String publisherId, int width, int heigh
208266 return Imp .builder ()
209267 .id (id )
210268 .banner (Banner .builder ().w (width ).h (height ).build ())
269+ .video (height > 250 ? com .iab .openrtb .request .Video .builder ().w (width ).h (height ).build () : null )
211270 .ext (extNode )
212271 .build ();
213272 }
@@ -222,12 +281,12 @@ private static BidRequest createBidRequest(List<Imp> imps) {
222281 private static AlvadsRequestOrtb createAlvadsRequest (String impId , int width , int height ) {
223282 final AlvaAdsImp alvaImp = AlvaAdsImp .builder ()
224283 .id (impId )
225- .banner (Map .of ("w" , width , "h" , height ))
284+ .banner (height <= 250 ? Map .of ("w" , width , "h" , height ) : null )
285+ .video (height > 250 ? Map .of ("w" , width , "h" , height ) : null )
226286 .build ();
227287
228288 return AlvadsRequestOrtb .builder ()
229289 .imp (List .of (alvaImp ))
230290 .build ();
231291 }
232-
233292}
0 commit comments