@@ -1282,4 +1282,119 @@ describe('auctionmanager.js', function () {
1282
1282
assert . equal ( doneSpy . callCount , 1 ) ;
1283
1283
} )
1284
1284
} ) ;
1285
+
1286
+ describe ( 'auctionOptions' , function ( ) {
1287
+ let bidRequests ;
1288
+ let doneSpy ;
1289
+ let clock ;
1290
+ let auction = {
1291
+ getBidRequests : ( ) => bidRequests ,
1292
+ getAuctionId : ( ) => '1' ,
1293
+ addBidReceived : ( ) => true ,
1294
+ getTimeout : ( ) => 1000
1295
+ }
1296
+ let requiredBidder = BIDDER_CODE ;
1297
+ let requiredBidder1 = BIDDER_CODE1 ;
1298
+ let secondaryBidder = 'doNotWaitForMe' ;
1299
+
1300
+ beforeEach ( ( ) => {
1301
+ clock = sinon . useFakeTimers ( ) ;
1302
+ doneSpy = sinon . spy ( ) ;
1303
+ config . setConfig ( {
1304
+ 'auctionOptions' : {
1305
+ secondaryBidders : [ secondaryBidder ]
1306
+ }
1307
+ } )
1308
+ } ) ;
1309
+
1310
+ afterEach ( ( ) => {
1311
+ doneSpy . resetHistory ( ) ;
1312
+ config . resetConfig ( ) ;
1313
+ clock . restore ( ) ;
1314
+ } ) ;
1315
+
1316
+ it ( 'should not wait to call auction done for secondary bidders' , function ( ) {
1317
+ let bids1 = [ mockBid ( { bidderCode : requiredBidder } ) ] ;
1318
+ let bids2 = [ mockBid ( { bidderCode : requiredBidder1 } ) ] ;
1319
+ let bids3 = [ mockBid ( { bidderCode : secondaryBidder } ) ] ;
1320
+ bidRequests = [
1321
+ mockBidRequest ( bids1 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1322
+ mockBidRequest ( bids2 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1323
+ mockBidRequest ( bids3 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1324
+ ] ;
1325
+ let cbs = auctionCallbacks ( doneSpy , auction ) ;
1326
+ // required bidder responds immeaditely to auction
1327
+ cbs . addBidResponse . call ( bidRequests [ 0 ] , ADUNIT_CODE1 , bids1 [ 0 ] ) ;
1328
+ cbs . adapterDone . call ( bidRequests [ 0 ] ) ;
1329
+ assert . equal ( doneSpy . callCount , 0 ) ;
1330
+
1331
+ // auction waits for second required bidder to respond
1332
+ clock . tick ( 100 ) ;
1333
+ cbs . addBidResponse . call ( bidRequests [ 1 ] , ADUNIT_CODE1 , bids2 [ 0 ] ) ;
1334
+ cbs . adapterDone . call ( bidRequests [ 1 ] ) ;
1335
+
1336
+ // auction done is reported and does not wait for secondaryBidder request
1337
+ assert . equal ( doneSpy . callCount , 1 ) ;
1338
+
1339
+ cbs . addBidResponse . call ( bidRequests [ 2 ] , ADUNIT_CODE1 , bids3 [ 0 ] ) ;
1340
+ cbs . adapterDone . call ( bidRequests [ 2 ] ) ;
1341
+ } ) ;
1342
+
1343
+ it ( 'should wait for all bidders if they are all secondary' , function ( ) {
1344
+ config . setConfig ( {
1345
+ 'auctionOptions' : {
1346
+ secondaryBidders : [ requiredBidder , requiredBidder1 , secondaryBidder ]
1347
+ }
1348
+ } )
1349
+ let bids1 = [ mockBid ( { bidderCode : requiredBidder } ) ] ;
1350
+ let bids2 = [ mockBid ( { bidderCode : requiredBidder1 } ) ] ;
1351
+ let bids3 = [ mockBid ( { bidderCode : secondaryBidder } ) ] ;
1352
+ bidRequests = [
1353
+ mockBidRequest ( bids1 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1354
+ mockBidRequest ( bids2 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1355
+ mockBidRequest ( bids3 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1356
+ ] ;
1357
+ let cbs = auctionCallbacks ( doneSpy , auction ) ;
1358
+ cbs . addBidResponse . call ( bidRequests [ 0 ] , ADUNIT_CODE1 , bids1 [ 0 ] ) ;
1359
+ cbs . adapterDone . call ( bidRequests [ 0 ] ) ;
1360
+ clock . tick ( 100 ) ;
1361
+ assert . equal ( doneSpy . callCount , 0 )
1362
+
1363
+ cbs . addBidResponse . call ( bidRequests [ 1 ] , ADUNIT_CODE1 , bids2 [ 0 ] ) ;
1364
+ cbs . adapterDone . call ( bidRequests [ 1 ] ) ;
1365
+ clock . tick ( 100 ) ;
1366
+ assert . equal ( doneSpy . callCount , 0 ) ;
1367
+
1368
+ cbs . addBidResponse . call ( bidRequests [ 2 ] , ADUNIT_CODE1 , bids3 [ 0 ] ) ;
1369
+ cbs . adapterDone . call ( bidRequests [ 2 ] ) ;
1370
+ assert . equal ( doneSpy . callCount , 1 ) ;
1371
+ } ) ;
1372
+
1373
+ it ( 'should allow secondaryBidders to respond in auction before is is done' , function ( ) {
1374
+ let bids1 = [ mockBid ( { bidderCode : requiredBidder } ) ] ;
1375
+ let bids2 = [ mockBid ( { bidderCode : requiredBidder1 } ) ] ;
1376
+ let bids3 = [ mockBid ( { bidderCode : secondaryBidder } ) ] ;
1377
+ bidRequests = [
1378
+ mockBidRequest ( bids1 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1379
+ mockBidRequest ( bids2 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1380
+ mockBidRequest ( bids3 [ 0 ] , { adUnitCode : ADUNIT_CODE1 } ) ,
1381
+ ] ;
1382
+ let cbs = auctionCallbacks ( doneSpy , auction ) ;
1383
+ // secondaryBidder is first to respond
1384
+ cbs . addBidResponse . call ( bidRequests [ 2 ] , ADUNIT_CODE1 , bids3 [ 0 ] ) ;
1385
+ cbs . adapterDone . call ( bidRequests [ 2 ] ) ;
1386
+ clock . tick ( 100 ) ;
1387
+ assert . equal ( doneSpy . callCount , 0 ) ;
1388
+
1389
+ cbs . addBidResponse . call ( bidRequests [ 1 ] , ADUNIT_CODE1 , bids2 [ 0 ] ) ;
1390
+ cbs . adapterDone . call ( bidRequests [ 1 ] ) ;
1391
+ clock . tick ( 100 ) ;
1392
+ assert . equal ( doneSpy . callCount , 0 ) ;
1393
+
1394
+ // first required bidder takes longest to respond, auction isn't marked as done until this occurs
1395
+ cbs . addBidResponse . call ( bidRequests [ 0 ] , ADUNIT_CODE1 , bids1 [ 0 ] ) ;
1396
+ cbs . adapterDone . call ( bidRequests [ 0 ] ) ;
1397
+ assert . equal ( doneSpy . callCount , 1 ) ;
1398
+ } ) ;
1399
+ } ) ;
1285
1400
} ) ;
0 commit comments