Skip to content

Commit

Permalink
Prebid core: restore bid-level renderer (prebid#9128)
Browse files Browse the repository at this point in the history
  • Loading branch information
dgirardi authored and JacobKlein26 committed Feb 8, 2023
1 parent 0f7f59b commit a4f0f06
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 23 deletions.
6 changes: 3 additions & 3 deletions src/auction.js
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ function getPreparedBidForAuction(bid, {index = auctionManager.index} = {}) {
events.emit(CONSTANTS.EVENTS.BID_ADJUSTMENT, bid);

// a publisher-defined renderer can be used to render bids
const adUnitRenderer = index.getAdUnit(bid).renderer;
const bidRenderer = index.getBidRequest(bid)?.renderer || index.getAdUnit(bid).renderer;

// a publisher can also define a renderer for a mediaType
const bidObjectMediaType = bid.mediaType;
Expand All @@ -704,8 +704,8 @@ function getPreparedBidForAuction(bid, {index = auctionManager.index} = {}) {
// the renderer for the mediaType takes precendence
if (mediaTypeRenderer && mediaTypeRenderer.url && mediaTypeRenderer.render && !(mediaTypeRenderer.backupOnly === true && bid.renderer)) {
renderer = mediaTypeRenderer;
} else if (adUnitRenderer && adUnitRenderer.url && adUnitRenderer.render && !(adUnitRenderer.backupOnly === true && bid.renderer)) {
renderer = adUnitRenderer;
} else if (bidRenderer && bidRenderer.url && bidRenderer.render && !(bidRenderer.backupOnly === true && bid.renderer)) {
renderer = bidRenderer;
}

if (renderer) {
Expand Down
49 changes: 29 additions & 20 deletions test/spec/auctionmanager_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,7 @@ describe('auctionmanager.js', function () {
let auction;
let ajaxStub;
let bids;
let bidderRequests;
let makeRequestsStub;

before(function () {
Expand All @@ -759,7 +760,8 @@ describe('auctionmanager.js', function () {
adUnitCodes = [ADUNIT_CODE];
auction = auctionModule.newAuction({adUnits, adUnitCodes, callback: function() {}, cbTimeout: 3000});
bids = TEST_BIDS.slice();
makeRequestsStub.returns(bids.map(b => mockBidRequest(b, {auctionId: auction.getAuctionId()})));
bidderRequests = bids.map(b => mockBidRequest(b, {auctionId: auction.getAuctionId()}));
makeRequestsStub.returns(bidderRequests);
indexAuctions = [auction];
createAuctionStub = sinon.stub(auctionModule, 'newAuction');
createAuctionStub.returns(auction);
Expand Down Expand Up @@ -813,25 +815,32 @@ describe('auctionmanager.js', function () {
assert.equal(registeredBid.adserverTargeting.extra, 'stuff');
});

it('installs publisher-defined renderers on bids', function () {
let renderer = {
url: 'renderer.js',
render: (bid) => bid
};
Object.assign(adUnits[0], {renderer});

let bids1 = Object.assign({},
bids[0],
{
bidderCode: BIDDER_CODE,
mediaType: 'video-outstream',
}
);
spec.interpretResponse.returns(bids1);
auction.callBids();
const addedBid = auction.getBidsReceived().pop();
assert.equal(addedBid.renderer.url, 'renderer.js');
});
describe('install publisher-defined renderers', () => {
Object.entries({
'on adUnit': () => adUnits[0],
'on bid': () => bidderRequests[0].bids[0],
}).forEach(([t, getObj]) => {
it(t, () => {
let renderer = {
url: 'renderer.js',
render: (bid) => bid
};

let bids1 = Object.assign({},
bids[0],
{
bidderCode: BIDDER_CODE,
mediaType: 'video-outstream',
}
);
Object.assign(getObj(), {renderer});
spec.interpretResponse.returns(bids1);
auction.callBids();
const addedBid = auction.getBidsReceived().pop();
assert.equal(addedBid.renderer.url, 'renderer.js');
})
})
})

it('installs publisher-defined backup renderers on bids', function () {
let renderer = {
Expand Down

0 comments on commit a4f0f06

Please sign in to comment.