Skip to content

Commit

Permalink
Merge pull request #136 from MailOnline/next-release
Browse files Browse the repository at this point in the history
Next release
  • Loading branch information
carpasse committed Jan 25, 2019
2 parents c2a7c42 + c18922a commit cee5f6e
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 5 deletions.
40 changes: 36 additions & 4 deletions src/runner/helpers/__tests__/startVideoAd.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ import VpaidAdUnit from '../../../adUnit/VpaidAdUnit';
import canPlay from '../../../adUnit/helpers/media/canPlay';
import VideoAdContainer from '../../../adContainer/VideoAdContainer';
import startVideoAd from '../startVideoAd';
import {
start,
closeLinear
} from '../../../tracker/linearEvents';
import {
adStopped,
adUserClose
} from '../../../adUnit/helpers/vpaid/api';

jest.mock('../../../adUnit/createVideoAdUnit');
jest.mock('../../../adUnit/helpers/media/canPlay');
Expand Down Expand Up @@ -170,14 +178,38 @@ describe('startVideoAd', () => {
expect(startVideoAd(vastAdChain, videoAdContainer, options)).rejects.toBe(adUnitError);
});

test('must cancel the ad unit if there is an error starting the VPAID ad unit', async () => {
[
adUserClose,
adStopped,
closeLinear
].forEach((event) => {
test(`must cancel the ad unit start on '${event}' event`, async () => {
expect.assertions(1);
const adUnit = createAdUnitMock(vastAdChain, videoAdContainer, options);

createVideoAdUnit.mockImplementation(() => {
adUnit.start = () => {
adUnit.emit(event);
};

return adUnit;
});

try {
await startVideoAd(vpaidAdChain, videoAdContainer, options);
} catch (error) {
expect(error.message).toBe(`Ad unit start rejected due to event '${event}'`);
}
});
});

test('must onAdReady event if the ad unit gets canceled', async () => {
expect.assertions(5);
canPlay.mockReturnValue(false);
const adUnitError = new Error('adUnit error');
const adUnit = createVPAIDAdUnitMock(vpaidAdChain, videoAdContainer, options);

createVideoAdUnit.mockImplementation(() => {
// eslint-disable-next-line promise/always-return, promise/always-return, promise/catch-or-return, promise/prefer-await-to-then
adUnit.start = () => {
adUnit.__simulateError(adUnitError);
};
Expand Down Expand Up @@ -206,7 +238,7 @@ describe('startVideoAd', () => {
createVideoAdUnit.mockImplementation(() => {
// eslint-disable-next-line promise/always-return, promise/always-return, promise/catch-or-return, promise/prefer-await-to-then
adUnit.start = () => {
adUnit.emit('start');
adUnit.emit(start);
};

return adUnit;
Expand Down Expand Up @@ -256,7 +288,7 @@ describe('startVideoAd', () => {
// eslint-disable-next-line promise/always-return, promise/always-return, promise/catch-or-return, promise/prefer-await-to-then

adUnit.start = () => {
adUnit.emit('start');
adUnit.emit(start);
};

return adUnit;
Expand Down
16 changes: 15 additions & 1 deletion src/runner/helpers/startVideoAd.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ import createVideoAdUnit from '../../adUnit/createVideoAdUnit';
import VideoAdContainer from '../../adContainer/VideoAdContainer';
import {getInteractiveFiles, getMediaFiles} from '../../vastSelectors';
import canPlay from '../../adUnit/helpers/media/canPlay';
import {
start,
closeLinear
} from '../../tracker/linearEvents';
import {
adStopped,
adUserClose
} from '../../adUnit/helpers/vpaid/api';

const validate = (vastChain, videoAdContainer) => {
if (!Array.isArray(vastChain) || vastChain.length === 0) {
Expand All @@ -26,8 +34,14 @@ const hasVastCreative = (ad, videoElement) => {
};

const startAdUnit = (adUnit, {onAdReady}) => new Promise((resolve, reject) => {
const createRejectHandler = (event) => () =>
reject(new Error(`Ad unit start rejected due to event '${event}'`));

adUnit.onError(reject);
adUnit.on('start', () => resolve(adUnit));
adUnit.on(start, () => resolve(adUnit));
adUnit.on(adUserClose, createRejectHandler(adUserClose));
adUnit.on(closeLinear, createRejectHandler(closeLinear));
adUnit.on(adStopped, createRejectHandler(adStopped));

onAdReady(adUnit);
adUnit.start();
Expand Down

0 comments on commit cee5f6e

Please sign in to comment.