mk9-prebid
Version:
Header Bidding Management Library
314 lines (287 loc) • 7.35 kB
JavaScript
import {expect} from 'chai';
import * as utils from 'src/utils.js';
import {
filterArrayData,
validateFpd
} from 'modules/validationFpdModule/index.js';
describe('the first party data validation module', function () {
let ortb2 = {
device: {
h: 911,
w: 1733
},
user: {
data: [{
segment: [{
id: 'foo'
}],
name: 'bar',
ext: 'string'
}]
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
let conf = {
device: {
h: 500,
w: 750
},
user: {
keywords: 'test1, test2',
gender: 'f',
data: [{
segment: [{
id: 'test'
}],
name: 'alt'
}]
},
site: {
ref: 'domain.com',
page: 'www.domain.com/test',
ext: {
data: {
inventory: ['first']
}
}
}
};
describe('filtering first party array data', function () {
it('returns empty array if no valid data', function () {
let arr = [{}];
let path = 'site.children.cat';
let child = {type: 'string'};
let parent = 'site';
let key = 'cat';
let validated = filterArrayData(arr, child, path, parent, key);
expect(validated).to.deep.equal([]);
});
it('filters invalid type of array data', function () {
let arr = ['foo', {test: 1}];
let path = 'site.children.cat';
let child = {type: 'string'};
let parent = 'site';
let key = 'cat';
let validated = filterArrayData(arr, child, path, parent, key);
expect(validated).to.deep.equal(['foo']);
});
it('filters all data for missing required children', function () {
let arr = [{test: 1}];
let path = 'site.children.content.children.data';
let child = {type: 'object'};
let parent = 'site';
let key = 'data';
let validated = filterArrayData(arr, child, path, parent, key);
expect(validated).to.deep.equal([]);
});
it('filters all data for invalid required children types', function () {
let arr = [{name: 'foo', segment: 1}];
let path = 'site.children.content.children.data';
let child = {type: 'object'};
let parent = 'site';
let key = 'data';
let validated = filterArrayData(arr, child, path, parent, key);
expect(validated).to.deep.equal([]);
});
it('returns only data with valid required nested children types', function () {
let arr = [{name: 'foo', segment: [{id: '1'}, {id: 2}, 'foobar']}];
let path = 'site.children.content.children.data';
let child = {type: 'object'};
let parent = 'site';
let key = 'data';
let validated = filterArrayData(arr, child, path, parent, key);
expect(validated).to.deep.equal([{name: 'foo', segment: [{id: '1'}]}]);
});
});
describe('validating first party data', function () {
it('filters user.data[0].ext for incorrect type', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
let expected = {
device: {
h: 911,
w: 1733
},
user: {
data: [{
segment: [{
id: 'foo'
}],
name: 'bar'
}]
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
it('filters user and site for empty data', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
let expected = {
device: {
h: 911,
w: 1733
}
};
duplicate.user.data = [];
duplicate.site.content.data = [];
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
it('filters user for empty valid segment values', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
let expected = {
device: {
h: 911,
w: 1733
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
duplicate.user.data[0].segment.push({test: 3});
duplicate.user.data[0].segment[0] = {foo: 'bar'};
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
it('filters user.data[0].ext and site.content.data[0].segement[1] for invalid data', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
let expected = {
device: {
h: 911,
w: 1733
},
user: {
data: [{
segment: [{
id: 'foo'
}],
name: 'bar'
}]
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
duplicate.site.content.data[0].segment.push({test: 3});
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
it('filters device for invalid data types', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
duplicate.device = {
h: '1',
w: '1'
}
let expected = {
user: {
data: [{
segment: [{
id: 'foo'
}],
name: 'bar'
}]
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
duplicate.site.content.data[0].segment.push({test: 3});
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
it('filters cur for invalid data type', function () {
let validated;
let duplicate = utils.deepClone(ortb2);
duplicate.cur = 8;
let expected = {
device: {
h: 911,
w: 1733
},
user: {
data: [{
segment: [{
id: 'foo'
}],
name: 'bar'
}]
},
site: {
content: {
data: [{
segment: [{
id: 'test'
}],
name: 'content',
ext: {
foo: 'bar'
}
}]
}
}
};
duplicate.site.content.data[0].segment.push({test: 3});
validated = validateFpd(duplicate);
expect(validated).to.deep.equal(expected);
});
});
});