forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			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: {},
 | |
|     }
 | |
|   );
 | |
| });
 | 
