210 lines
4.5 KiB
JavaScript
210 lines
4.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
* Tests schema validation.
|
|
*/
|
|
|
|
add_task(async function testBasic() {
|
|
// Old data types, should not be recognised.
|
|
Assert.equal(PageDataSchema.nameForType(1), null);
|
|
Assert.equal(PageDataSchema.nameForType(2), null);
|
|
|
|
Assert.equal(
|
|
PageDataSchema.nameForType(PageDataSchema.DATA_TYPE.VIDEO),
|
|
"VIDEO"
|
|
);
|
|
Assert.equal(
|
|
PageDataSchema.nameForType(PageDataSchema.DATA_TYPE.PRODUCT),
|
|
"PRODUCT"
|
|
);
|
|
});
|
|
|
|
add_task(async function testProduct() {
|
|
// Products must have a name
|
|
await Assert.rejects(
|
|
PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {}),
|
|
/missing required property 'name'/
|
|
);
|
|
|
|
await PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
});
|
|
|
|
await PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
price: {
|
|
value: 5,
|
|
},
|
|
});
|
|
|
|
await PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
price: {
|
|
value: 5,
|
|
currency: "USD",
|
|
},
|
|
});
|
|
|
|
await Assert.rejects(
|
|
PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
price: {
|
|
currency: "USD",
|
|
},
|
|
}),
|
|
/missing required property 'value'/
|
|
);
|
|
|
|
await PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
shippingCost: {
|
|
value: 5,
|
|
currency: "USD",
|
|
},
|
|
});
|
|
|
|
await Assert.rejects(
|
|
PageDataSchema.validateData(PageDataSchema.DATA_TYPE.PRODUCT, {
|
|
name: "Bolts",
|
|
shippingCost: {
|
|
currency: "USD",
|
|
},
|
|
}),
|
|
/missing required property 'value'/
|
|
);
|
|
});
|
|
|
|
add_task(async function testCoalesce() {
|
|
let joined = PageDataSchema.coalescePageData({}, {});
|
|
Assert.deepEqual(joined, { data: {} });
|
|
|
|
joined = PageDataSchema.coalescePageData(
|
|
{
|
|
url: "https://www.google.com/",
|
|
data: {
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "bolts",
|
|
},
|
|
[PageDataSchema.DATA_TYPE.VIDEO]: {
|
|
name: "My video",
|
|
duration: 500,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
url: "https://www.mozilla.com/",
|
|
date: 27,
|
|
siteName: "Mozilla",
|
|
data: {
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "newname",
|
|
price: {
|
|
value: 55,
|
|
},
|
|
},
|
|
[PageDataSchema.DATA_TYPE.AUDIO]: {
|
|
name: "My song",
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
Assert.deepEqual(joined, {
|
|
url: "https://www.google.com/",
|
|
date: 27,
|
|
siteName: "Mozilla",
|
|
data: {
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "bolts",
|
|
price: {
|
|
value: 55,
|
|
},
|
|
},
|
|
[PageDataSchema.DATA_TYPE.VIDEO]: {
|
|
name: "My video",
|
|
duration: 500,
|
|
},
|
|
[PageDataSchema.DATA_TYPE.AUDIO]: {
|
|
name: "My song",
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
add_task(async function testPageData() {
|
|
// Full page data needs a url and a date
|
|
await Assert.rejects(
|
|
PageDataSchema.validatePageData({}),
|
|
/missing required property 'url'/
|
|
);
|
|
|
|
await Assert.rejects(
|
|
PageDataSchema.validatePageData({ url: "https://www.google.com" }),
|
|
/missing required property 'date'/
|
|
);
|
|
|
|
await Assert.rejects(
|
|
PageDataSchema.validatePageData({ date: 55 }),
|
|
/missing required property 'url'/
|
|
);
|
|
|
|
Assert.deepEqual(
|
|
await PageDataSchema.validatePageData({
|
|
url: "https://www.google.com",
|
|
date: 55,
|
|
}),
|
|
{ url: "https://www.google.com", date: 55, data: {} }
|
|
);
|
|
|
|
Assert.deepEqual(
|
|
await PageDataSchema.validatePageData({
|
|
url: "https://www.google.com",
|
|
date: 55,
|
|
data: {
|
|
0: {
|
|
name: "unknown",
|
|
},
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "Bolts",
|
|
price: {
|
|
value: 55,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
{
|
|
url: "https://www.google.com",
|
|
date: 55,
|
|
data: {
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "Bolts",
|
|
price: {
|
|
value: 55,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
// Should drop invalid inner data.
|
|
Assert.deepEqual(
|
|
await PageDataSchema.validatePageData({
|
|
url: "https://www.google.com",
|
|
date: 55,
|
|
data: {
|
|
[PageDataSchema.DATA_TYPE.PRODUCT]: {
|
|
name: "Bolts",
|
|
price: {
|
|
currency: "USD",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
{
|
|
url: "https://www.google.com",
|
|
date: 55,
|
|
data: {},
|
|
}
|
|
);
|
|
});
|