66import com .iab .openrtb .request .Device ;
77import com .iab .openrtb .request .Imp ;
88import com .iab .openrtb .request .Site ;
9+ import com .iab .openrtb .request .Video ;
910import com .iab .openrtb .response .Bid ;
1011import com .iab .openrtb .response .BidResponse ;
1112import com .iab .openrtb .response .SeatBid ;
13+ import io .netty .handler .codec .http .HttpHeaderValues ;
1214import io .vertx .core .MultiMap ;
1315import org .junit .jupiter .api .Test ;
1416import org .prebid .server .VertxTest ;
2022import org .prebid .server .bidder .model .HttpResponse ;
2123import org .prebid .server .bidder .model .Result ;
2224import org .prebid .server .proto .openrtb .ext .response .BidType ;
25+ import org .prebid .server .util .HttpUtil ;
2326
2427import java .math .BigDecimal ;
2528import java .util .Arrays ;
2831
2932import static org .assertj .core .api .Assertions .assertThat ;
3033import static org .assertj .core .api .Assertions .assertThatIllegalArgumentException ;
34+ import static org .assertj .core .api .Assertions .tuple ;
3135
32- class AlvadsBidderTest extends VertxTest {
36+ public class AlvadsBidderTest extends VertxTest {
3337
3438 private static final String ENDPOINT_URL = "https://helios-ads-qa-core.ssidevops.com/decision/openrtb" ;
3539
@@ -70,7 +74,10 @@ public void makeHttpRequestsShouldBuildValidHttpRequestsUrl() {
7074
7175 // then
7276 assertThat (result .getErrors ()).isEmpty ();
73- result .getValue ().forEach (req -> assertThat (req .getUri ()).isEqualTo (ENDPOINT_URL ));
77+
78+ assertThat (result .getValue ())
79+ .extracting (HttpRequest ::getUri )
80+ .allMatch (uri -> uri .equals (ENDPOINT_URL ));
7481 }
7582
7683 @ Test
@@ -82,7 +89,17 @@ public void makeHttpRequestsShouldBuildValidHttpRequestsHeaders() {
8289 final Result <List <HttpRequest <AlvadsRequestOrtb >>> result = target .makeHttpRequests (bidRequest );
8390
8491 // then
85- result .getValue ().forEach (req -> assertThat (req .getHeaders ()).isNotEmpty ());
92+ assertThat (result .getErrors ()).isEmpty ();
93+ assertThat (result .getValue ())
94+ .extracting (HttpRequest ::getHeaders )
95+ .flatExtracting (MultiMap ::entries )
96+ .extracting (Map .Entry ::getKey , Map .Entry ::getValue )
97+ .containsExactlyInAnyOrder (
98+ tuple (HttpUtil .CONTENT_TYPE_HEADER .toString (), HttpUtil .APPLICATION_JSON_CONTENT_TYPE ),
99+ tuple (HttpUtil .ACCEPT_HEADER .toString (), HttpHeaderValues .APPLICATION_JSON .toString ()),
100+
101+ tuple (HttpUtil .CONTENT_TYPE_HEADER .toString (), HttpUtil .APPLICATION_JSON_CONTENT_TYPE ),
102+ tuple (HttpUtil .ACCEPT_HEADER .toString (), HttpHeaderValues .APPLICATION_JSON .toString ()));
86103 }
87104
88105 @ Test
@@ -155,17 +172,85 @@ public void makeBidsShouldReturnEmptyListForEmptyResponse() {
155172 }
156173
157174 @ Test
158- public void makeBidsShouldReturnBidderBidsWithFullFields () {
175+ public void makeBidsShouldReturnBannerBidderBid () {
159176 // given
160177 final Imp bannerImp = createImp ("imp-banner" , "pub-1" , 300 , 250 );
161- final Imp videoImp = createImp ("imp-video" , "pub-2" , 640 , 480 );
162-
163- final BidRequest bidRequest = createBidRequest (List .of (bannerImp , videoImp ));
178+ final BidRequest bidRequest = createBidRequest (List .of (bannerImp ));
164179
165180 final Bid bannerBid = createBid ("bid-banner" , "imp-banner" , 1.5 );
181+ final SeatBid seatBid = createSeatBid (bannerBid );
182+ final BidResponse bidResponse = createBidResponse (List .of (seatBid ), "USD" );
183+
184+ final HttpResponse httpResponse = HttpResponse .of (
185+ 200 ,
186+ MultiMap .caseInsensitiveMultiMap (),
187+ jacksonMapper .encodeToString (bidResponse ));
188+
189+ final HttpRequest <AlvadsRequestOrtb > request = HttpRequest .<AlvadsRequestOrtb >builder ()
190+ .payload (AlvadsRequestOrtb .builder ()
191+ .imp (List .of (createAlvadsRequestImp ("imp-banner" , 300 , 250 )))
192+ .build ())
193+ .build ();
194+
195+ // when
196+ final Result <List <BidderBid >> result = target .makeBids (
197+ BidderCall .succeededHttp (request , httpResponse , null ),
198+ bidRequest
199+ );
200+
201+ // then
202+ final BidderBid expected = BidderBid .of (
203+ bannerBid ,
204+ BidType .banner ,
205+ "USD"
206+ );
207+ assertThat (result .getValue ()).containsExactly (expected );
208+ }
209+
210+ @ Test
211+ public void makeBidsShouldReturnVideoBidderBid () {
212+ // given
213+ final Imp videoImp = createImp ("imp-video" , "pub-2" , 640 , 480 );
214+ final BidRequest bidRequest = createBidRequest (List .of (videoImp ));
215+
166216 final Bid videoBid = createBid ("bid-video" , "imp-video" , 2.5 );
217+ final SeatBid seatBid = createSeatBid (videoBid );
218+ final BidResponse bidResponse = createBidResponse (List .of (seatBid ), "USD" );
167219
168- final SeatBid seatBid = createSeatBid (bannerBid , videoBid );
220+ final HttpResponse httpResponse = HttpResponse .of (
221+ 200 ,
222+ MultiMap .caseInsensitiveMultiMap (),
223+ jacksonMapper .encodeToString (bidResponse ));
224+
225+ final HttpRequest <AlvadsRequestOrtb > request = HttpRequest .<AlvadsRequestOrtb >builder ()
226+ .payload (AlvadsRequestOrtb .builder ()
227+ .imp (List .of (createAlvadsRequestImp ("imp-video" , 640 , 480 )))
228+ .build ())
229+ .build ();
230+
231+ // when
232+ final Result <List <BidderBid >> result = target .makeBids (
233+ BidderCall .succeededHttp (request , httpResponse , null ),
234+ bidRequest
235+ );
236+
237+ // then
238+ final BidderBid expected = BidderBid .of (
239+ videoBid ,
240+ BidType .video ,
241+ "USD"
242+ );
243+ assertThat (result .getValue ()).containsExactly (expected );
244+ }
245+
246+ @ Test
247+ public void makeBidsShouldIgnoreUnsupportedBidType () {
248+ // given
249+ final Imp imp = createImp ("imp-unknown" , "pub-3" , 100 , 100 );
250+ final BidRequest bidRequest = createBidRequest (List .of (imp ));
251+
252+ final Bid unknownBid = createBid ("bid-unknown" , "imp-unknown" , 1.0 );
253+ final SeatBid seatBid = createSeatBid (unknownBid );
169254 final BidResponse bidResponse = createBidResponse (List .of (seatBid ), "USD" );
170255
171256 final HttpResponse httpResponse = HttpResponse .of (
@@ -175,10 +260,7 @@ public void makeBidsShouldReturnBidderBidsWithFullFields() {
175260
176261 final HttpRequest <AlvadsRequestOrtb > request = HttpRequest .<AlvadsRequestOrtb >builder ()
177262 .payload (AlvadsRequestOrtb .builder ()
178- .imp (List .of (
179- createAlvadsRequestImp ("imp-banner" , 300 , 250 ),
180- createAlvadsRequestImp ("imp-video" , 640 , 480 )
181- ))
263+ .imp (List .of ())
182264 .build ())
183265 .build ();
184266
@@ -189,23 +271,7 @@ public void makeBidsShouldReturnBidderBidsWithFullFields() {
189271 );
190272
191273 // then
192- assertThat (result .getValue ()).hasSize (2 );
193-
194- final BidderBid bannerBidderBid = result .getValue ().stream ()
195- .filter (b -> b .getBid ().getImpid ().equals ("imp-banner" ))
196- .findFirst ()
197- .orElseThrow ();
198- assertThat (bannerBidderBid .getBid ().getId ()).isEqualTo ("bid-banner" );
199- assertThat (bannerBidderBid .getBid ().getPrice ()).isEqualByComparingTo ("1.5" );
200- assertThat (bannerBidderBid .getType ()).isEqualTo (BidType .banner );
201-
202- final BidderBid videoBidderBid = result .getValue ().stream ()
203- .filter (b -> b .getBid ().getImpid ().equals ("imp-video" ))
204- .findFirst ()
205- .orElseThrow ();
206- assertThat (videoBidderBid .getBid ().getId ()).isEqualTo ("bid-video" );
207- assertThat (videoBidderBid .getBid ().getPrice ()).isEqualByComparingTo ("2.5" );
208- assertThat (videoBidderBid .getType ()).isEqualTo (BidType .video );
274+ assertThat (result .getValue ()).isEmpty ();
209275 }
210276
211277 private static BidRequest createBidRequestWithBannerAndVideo () {
@@ -231,7 +297,7 @@ private static BidRequest createBidRequestWithBannerAndVideo() {
231297
232298 final Imp imp2 = Imp .builder ()
233299 .id ("imp-2" )
234- .video (com . iab . openrtb . request . Video .builder ().w (640 ).h (480 ).build ())
300+ .video (Video .builder ().w (640 ).h (480 ).build ())
235301 .ext (impExtNode2 )
236302 .build ();
237303
@@ -286,18 +352,6 @@ private static BidRequest createBidRequest(List<Imp> imps) {
286352 .build ();
287353 }
288354
289- private static AlvadsRequestOrtb createAlvadsRequest (String impId , int width , int height ) {
290- final AlvaAdsImp alvaImp = AlvaAdsImp .builder ()
291- .id (impId )
292- .banner (height <= 250 ? Map .of ("w" , width , "h" , height ) : null )
293- .video (height > 250 ? Map .of ("w" , width , "h" , height ) : null )
294- .build ();
295-
296- return AlvadsRequestOrtb .builder ()
297- .imp (List .of (alvaImp ))
298- .build ();
299- }
300-
301355 private static AlvaAdsImp createAlvadsRequestImp (String impId , int width , int height ) {
302356 return AlvaAdsImp .builder ()
303357 .id (impId )
0 commit comments