videojs-contrib-ads
Version:
A framework that provides common functionality needed by video advertisement libraries working with video.js.
167 lines (137 loc) • 4.47 kB
JavaScript
import QUnit from 'qunit';
import {obtainUsPrivacyString, getCurrentUspString} from '../../src/usPrivacy.js';
import sinon from 'sinon';
QUnit.module('US Privacy - obtainUsPrivacyString()', () => {
QUnit.test('should call callback with uspString when __uspapi is available', (assert) => {
const done = assert.async();
const uspData = {uspString: '1YNN'};
const customWindow = {
__uspapi: (command, version, cb) => {
cb(uspData, true);
}
};
obtainUsPrivacyString((result) => {
assert.equal(result, uspData.uspString, 'uspString is returned');
done();
}, customWindow);
});
QUnit.test('should call callback with null when __uspapi is available but call is unsuccessful', (assert) => {
const done = assert.async();
const customWindow = {
__uspapi: (command, version, cb) => {
cb(null, false);
}
};
obtainUsPrivacyString((result) => {
assert.equal(result, null, 'null is returned');
done();
}, customWindow);
});
QUnit.test('should call callback with uspString when __uspapi is not available and received message is valid', (assert) => {
const done = assert.async();
const uspData = {uspString: '1YNN'};
const uniqueId = 'testUniqueId'.toString(36).substring(2);
const successfulMessageEvent = {
data: {
__uspapiReturn: {
callId: uniqueId,
returnValue: uspData,
success: true
}
}
};
const eventListeners = {};
const customWindow = {
addEventListener: (event, handler) => {
eventListeners[event] = handler;
},
removeEventListener: (event) => {
delete eventListeners[event];
}
};
customWindow.parent = {
frames: {
__uspapiLocator: true
},
postMessage: () => {
setTimeout(() => {
eventListeners.message(successfulMessageEvent);
}, 0);
}
};
customWindow.top = customWindow.parent;
sinon.stub(Math, 'random').returns('testUniqueId');
obtainUsPrivacyString((result) => {
assert.equal(result, uspData.uspString, 'uspString is returned');
Math.random.restore();
done();
}, customWindow);
});
QUnit.test('should call callback with uspString when __uspapi is not available and received message is not valid', (assert) => {
const done = assert.async();
const uniqueId = 'testUniqueId'.toString(36).substring(2);
const unsuccessfulMessageEvent = {
data: {
__uspapiReturn: {
callId: uniqueId,
returnValue: {},
success: false
}
}
};
const eventListeners = {};
const customWindow = {
addEventListener: (event, handler) => {
eventListeners[event] = handler;
},
removeEventListener: (event) => {
delete eventListeners[event];
}
};
customWindow.parent = {
frames: {
__uspapiLocator: true
},
postMessage: () => {
setTimeout(() => {
eventListeners.message(unsuccessfulMessageEvent);
}, 0);
}
};
customWindow.top = customWindow.parent;
sinon.stub(Math, 'random').returns('testUniqueId');
obtainUsPrivacyString((result) => {
assert.equal(result, null, 'null is returned');
Math.random.restore();
done();
}, customWindow);
});
});
QUnit.module('US Privacy - getCurrentUspString()', () => {
QUnit.test('should return the latest uspString', (assert) => {
const done1 = assert.async();
const done2 = assert.async();
const uspData1 = {uspString: '1YNN'};
const uspData2 = {uspString: '1YNY'};
const customWindow1 = {
__uspapi: (command, version, cb) => {
cb(uspData1, true);
}
};
const customWindow2 = {
__uspapi: (command, version, cb) => {
cb(uspData2, true);
}
};
obtainUsPrivacyString((result1) => {
assert.equal(result1, uspData1.uspString, 'uspString1 is returned');
assert.equal(getCurrentUspString(), uspData1.uspString, 'getCurrentUspString() returns the latest uspString1');
done1();
}, customWindow1);
obtainUsPrivacyString((result2) => {
assert.equal(result2, uspData2.uspString, 'uspString2 is returned');
assert.equal(getCurrentUspString(), uspData2.uspString, 'getCurrentUspString() returns the latest uspString2');
done2();
}, customWindow2);
});
});