@@ -657,6 +657,56 @@ describe('rubicon analytics adapter', function () {
657
657
expect ( message ) . to . deep . equal ( ANALYTICS_MESSAGE ) ;
658
658
} ) ;
659
659
660
+ it ( 'should pick the highest cpm bid if more than one bid per bidRequestId' , function ( ) {
661
+ // Only want one bid request in our mock auction
662
+ let bidRequested = utils . deepClone ( MOCK . BID_REQUESTED ) ;
663
+ bidRequested . bids . shift ( ) ;
664
+ let auctionInit = utils . deepClone ( MOCK . AUCTION_INIT ) ;
665
+ auctionInit . adUnits . shift ( ) ;
666
+
667
+ // clone the mock bidResponse and duplicate
668
+ let duplicateResponse1 = utils . deepClone ( BID2 ) ;
669
+ duplicateResponse1 . cpm = 1.0 ;
670
+ duplicateResponse1 . adserverTargeting . hb_pb = '1.0' ;
671
+ duplicateResponse1 . adserverTargeting . hb_adid = '1111' ;
672
+ let duplicateResponse2 = utils . deepClone ( BID2 ) ;
673
+ duplicateResponse2 . cpm = 5.5 ;
674
+ duplicateResponse2 . adserverTargeting . hb_pb = '5.5' ;
675
+ duplicateResponse2 . adserverTargeting . hb_adid = '5555' ;
676
+ let duplicateResponse3 = utils . deepClone ( BID2 ) ;
677
+ duplicateResponse3 . cpm = 0.1 ;
678
+ duplicateResponse3 . adserverTargeting . hb_pb = '0.1' ;
679
+ duplicateResponse3 . adserverTargeting . hb_adid = '3333' ;
680
+
681
+ const setTargeting = {
682
+ [ duplicateResponse2 . adUnitCode ] : duplicateResponse2 . adserverTargeting
683
+ } ;
684
+
685
+ const bidWon = Object . assign ( { } , duplicateResponse2 , {
686
+ 'status' : 'rendered'
687
+ } ) ;
688
+
689
+ // spoof the auction with just our duplicates
690
+ events . emit ( AUCTION_INIT , auctionInit ) ;
691
+ events . emit ( BID_REQUESTED , bidRequested ) ;
692
+ events . emit ( BID_RESPONSE , duplicateResponse1 ) ;
693
+ events . emit ( BID_RESPONSE , duplicateResponse2 ) ;
694
+ events . emit ( BID_RESPONSE , duplicateResponse3 ) ;
695
+ events . emit ( AUCTION_END , MOCK . AUCTION_END ) ;
696
+ events . emit ( SET_TARGETING , setTargeting ) ;
697
+ events . emit ( BID_WON , bidWon ) ;
698
+
699
+ let message = JSON . parse ( requests [ 0 ] . requestBody ) ;
700
+ validate ( message ) ;
701
+ expect ( message . auctions [ 0 ] . adUnits [ 0 ] . bids [ 0 ] . bidResponse . bidPriceUSD ) . to . equal ( 5.5 ) ;
702
+ expect ( message . auctions [ 0 ] . adUnits [ 0 ] . adserverTargeting . hb_pb ) . to . equal ( '5.5' ) ;
703
+ expect ( message . auctions [ 0 ] . adUnits [ 0 ] . adserverTargeting . hb_adid ) . to . equal ( '5555' ) ;
704
+ expect ( message . bidsWon . length ) . to . equal ( 1 ) ;
705
+ expect ( message . bidsWon [ 0 ] . bidResponse . bidPriceUSD ) . to . equal ( 5.5 ) ;
706
+ expect ( message . bidsWon [ 0 ] . adserverTargeting . hb_pb ) . to . equal ( '5.5' ) ;
707
+ expect ( message . bidsWon [ 0 ] . adserverTargeting . hb_adid ) . to . equal ( '5555' ) ;
708
+ } ) ;
709
+
660
710
it ( 'should send batched message without BID_WON if necessary and further BID_WON events individually' , function ( ) {
661
711
events . emit ( AUCTION_INIT , MOCK . AUCTION_INIT ) ;
662
712
events . emit ( BID_REQUESTED , MOCK . BID_REQUESTED ) ;
0 commit comments