From f92c03b7559062edd7f186a0a8adb18f8a9538f4 Mon Sep 17 00:00:00 2001 From: Marcin Komorski Date: Thu, 18 Jul 2024 16:11:59 +0200 Subject: [PATCH] #9573 adding onAddRenderSucceeded to bidder spec --- src/adRendering.js | 3 +++ src/adapterManager.js | 4 ++++ test/spec/unit/adRendering_spec.js | 28 +++++++++++++++++++++- test/spec/unit/core/adapterManager_spec.js | 10 ++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/adRendering.js b/src/adRendering.js index 9eb894ec190..e4acfd2d69a 100644 --- a/src/adRendering.js +++ b/src/adRendering.js @@ -18,6 +18,7 @@ import {getCreativeRenderer} from './creativeRenderers.js'; import {hook} from './hook.js'; import {fireNativeTrackers} from './native.js'; import {GreedyPromise} from './utils/promise.js'; +import adapterManager from './adapterManager.js'; const { AD_RENDER_FAILED, AD_RENDER_SUCCEEDED, STALE_RENDER, BID_WON } = EVENTS; const { EXCEPTION } = AD_RENDER_FAILED_REASON; @@ -68,6 +69,8 @@ export function emitAdRenderSucceeded({ doc, bid, id }) { if (bid) data.bid = bid; if (id) data.adId = id; + adapterManager.callAdRenderSucceededBidder(bid.adapterCode || bid.bidder, bid); + events.emit(AD_RENDER_SUCCEEDED, data); } diff --git a/src/adapterManager.js b/src/adapterManager.js index 2d4bd7a5f6b..a571ba62ddc 100644 --- a/src/adapterManager.js +++ b/src/adapterManager.js @@ -688,6 +688,10 @@ adapterManager.callBidderError = function(bidder, error, bidderRequest) { tryCallBidderMethod(bidder, 'onBidderError', param); }; +adapterManager.callAdRenderSucceededBidder = function (bidder, bid) { + tryCallBidderMethod(bidder, 'onAdRenderSucceeded', bid); +} + function resolveAlias(alias) { const seen = new Set(); while (_aliasRegistry.hasOwnProperty(alias) && !seen.has(alias)) { diff --git a/test/spec/unit/adRendering_spec.js b/test/spec/unit/adRendering_spec.js index 4d0962a0b2c..971e92224e9 100644 --- a/test/spec/unit/adRendering_spec.js +++ b/test/spec/unit/adRendering_spec.js @@ -1,7 +1,7 @@ import * as events from 'src/events.js'; import * as utils from 'src/utils.js'; import { - doRender, getBidToRender, + doRender, emitAdRenderSucceeded, getBidToRender, getRenderingData, handleCreativeEvent, handleNativeMessage, @@ -12,6 +12,7 @@ import {expect} from 'chai/index.mjs'; import {config} from 'src/config.js'; import {VIDEO} from '../../../src/mediaTypes.js'; import {auctionManager} from '../../../src/auctionManager.js'; +import adapterManager from '../../../src/adapterManager.js'; describe('adRendering', () => { let sandbox; @@ -267,4 +268,29 @@ describe('adRendering', () => { sinon.assert.calledWith(fireTrackers, data, bid); }) }) + + describe('onAdRenderSucceeded', () => { + let mockAdapterSpec, bids; + beforeEach(() => { + mockAdapterSpec = { + onAdRenderSucceeded: sinon.stub() + }; + adapterManager.bidderRegistry['mockBidder'] = { + bidder: 'mockBidder', + getSpec: function () { return mockAdapterSpec; }, + }; + bids = [ + { bidder: 'mockBidder', params: { placementId: 'id' } }, + ]; + }); + + afterEach(function () { + delete adapterManager.bidderRegistry['mockBidder']; + }); + + it('should invoke onAddRenderSucceeded on emitAdRenderSucceeded', () => { + emitAdRenderSucceeded({ bid: bids[0] }); + sinon.assert.called(mockAdapterSpec.onAdRenderSucceeded); + }); + }); }); diff --git a/test/spec/unit/core/adapterManager_spec.js b/test/spec/unit/core/adapterManager_spec.js index 9132aaeb903..a68634501ac 100644 --- a/test/spec/unit/core/adapterManager_spec.js +++ b/test/spec/unit/core/adapterManager_spec.js @@ -428,6 +428,16 @@ describe('adapterManager tests', function () { sinon.assert.notCalled(criteoSpec.onBidViewable); }) }); + + describe('onAdRenderSucceeded', function () { + beforeEach(() => { + criteoSpec.onAdRenderSucceeded = sinon.stub() + }); + it('should call spec\'s onAdRenderSucceeded callback', function () { + adapterManager.callAdRenderSucceededBidder(bids[0].bidder, bids[0]); + sinon.assert.called(criteoSpec.onAdRenderSucceeded); + }); + }); }) describe('onBidderError', function () { const bidder = 'appnexus';