Skip to content

Commit

Permalink
Improve E2E testing of prebid (#1811)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakeii authored Feb 25, 2025
1 parent 3fc5034 commit 0ab472d
Show file tree
Hide file tree
Showing 3 changed files with 148 additions and 0 deletions.
103 changes: 103 additions & 0 deletions playwright/tests/prebid.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import { expect, test } from '@playwright/test';
import type { PrebidAuctionInitEvent } from '../../src/lib/header-bidding/prebid-types';
import { articles } from '../fixtures/pages';
import { cmpAcceptAll } from '../lib/cmp';
import { loadPage } from '../lib/load-page';

const testPage = articles[0];

test.describe('Prebid', () => {
test('should load the prebid script', async ({ page }) => {
const scriptRequestPromise = page.waitForRequest(
/graun\.Prebid\.js\.commercial\.js$/,
);
await loadPage(page, testPage.path);
await cmpAcceptAll(page);
const prebid = await scriptRequestPromise;

expect(prebid).toBeTruthy();
});

test('should request bids for top-above-nav', async ({ page }) => {
await loadPage(page, testPage.path);

await cmpAcceptAll(page);

await page.waitForFunction(
() => {
const events = window.pbjs?.getEvents() ?? [];
return events.find(
(event) =>
event.eventType === 'auctionInit' &&
event.args.adUnitCodes.includes(
'dfp-ad--top-above-nav',
),
);
},
{ timeout: 10000 },
);

const topAboveNavBidderRequests = await page.evaluate(() => {
const auctionInitEvent = window.pbjs
?.getEvents()
.find(
(event): event is PrebidAuctionInitEvent =>
event.eventType === 'auctionInit' &&
event.args.adUnitCodes.includes(
'dfp-ad--top-above-nav',
),
);

return auctionInitEvent?.args.bidderRequests;
});

const bidders = topAboveNavBidderRequests?.map(
(request) => request.bidderCode,
);

expect(bidders).toBeTruthy();
expect(bidders).toHaveLength(10);
[
'oxd',
'and',
'pubmatic',
'ix',
'adyoulike',
'ozone',
'xhb',
'criteo',
'ttd',
'rubicon',
].forEach((bidder) => {
expect(bidders).toContain(bidder);
});
});

test('should not find bidderErrors (excluding timeouts)', async ({
page,
}) => {
await loadPage(page, testPage.path);

await cmpAcceptAll(page);

await page.waitForFunction(
() => {
const events = window.pbjs?.getEvents() ?? [];
return events.find((event) => event.eventType === 'auctionEnd');
},
{ timeout: 10000 },
);

const bidderErrors = await page.evaluate(() => {
return window.pbjs
?.getEvents()
.filter(
(event) =>
event.eventType === 'bidderError' &&
event.args.error.timedOut !== true,
);
});

expect(bidderErrors).toHaveLength(0);
});
});
43 changes: 43 additions & 0 deletions src/lib/header-bidding/prebid-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,49 @@ export type PrebidBid = {
params: PrebidParams;
};

export type PrebidBidderRequest = {
bidderCode: string;
};

export type PrebidBidReqestedEvent = {
eventType: 'bidRequested';
args: {
bids: PrebidBid[];
};
};

export type PrebidBidderErrorEvent = {
eventType: 'bidderError';
args: {
bidderRequest: PrebidBidderRequest;
error: {
timedOut?: boolean;
};
};
};

export type PrebidAuctionInitEvent = {
eventType: 'auctionInit';
args: {
adUnitCodes: string[];
bidderRequests: PrebidBidderRequest[];
};
};

export type PrebidAuctionEndEvent = {
eventType: 'auctionEnd';
args: {
adUnitCodes: string[];
bidsReceived: PrebidBid[];
};
};

export type PrebidEvent =
| PrebidBidReqestedEvent
| PrebidBidderErrorEvent
| PrebidAuctionInitEvent
| PrebidAuctionEndEvent;

export type PrebidMediaTypes = {
banner: {
sizes: HeaderBiddingSize[];
Expand Down
2 changes: 2 additions & 0 deletions src/lib/header-bidding/prebid/prebid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import type {
BidderCode,
HeaderBiddingSlot,
PrebidBid,
PrebidEvent,
PrebidMediaTypes,
SlotFlatMap,
} from '../prebid-types';
Expand Down Expand Up @@ -263,6 +264,7 @@ declare global {
codeArr?: string[],
customSlotMatching?: (slot: unknown) => unknown,
) => void;
getEvents: () => PrebidEvent[];
};
}
}
Expand Down

0 comments on commit 0ab472d

Please sign in to comment.