test_pagedata_basic.js (2084B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 /* 5 * Simply tests that the notification is dispatched when new page data is 6 * discovered. 7 */ 8 9 ChromeUtils.defineESModuleGetters(this, { 10 PageDataService: 11 "moz-src:///browser/components/pagedata/PageDataService.sys.mjs", 12 }); 13 14 add_task(async function test_pageDataDiscovered_notifies() { 15 let url = "https://www.mozilla.org/"; 16 17 Assert.equal( 18 PageDataService.getCached(url), 19 null, 20 "Should be no cached data." 21 ); 22 23 let promise = PageDataService.once("page-data"); 24 25 PageDataService.pageDataDiscovered({ 26 url, 27 date: 32453456, 28 data: { 29 [PageDataSchema.DATA_TYPE.PRODUCT]: { 30 name: "Bolts", 31 price: { value: 276 }, 32 }, 33 }, 34 }); 35 36 let pageData = await promise; 37 Assert.equal( 38 pageData.url, 39 url, 40 "Should have notified data for the expected url" 41 ); 42 43 Assert.deepEqual( 44 pageData, 45 { 46 url, 47 date: 32453456, 48 data: { 49 [PageDataSchema.DATA_TYPE.PRODUCT]: { 50 name: "Bolts", 51 price: { value: 276 }, 52 }, 53 }, 54 }, 55 "Should have returned the correct product data" 56 ); 57 58 Assert.equal( 59 PageDataService.getCached(url), 60 null, 61 "Should not have cached the data as there was no actor locking." 62 ); 63 64 let actor = {}; 65 PageDataService.lockEntry(actor, url); 66 67 PageDataService.pageDataDiscovered({ 68 url, 69 date: 32453456, 70 data: { 71 [PageDataSchema.DATA_TYPE.PRODUCT]: { 72 name: "Bolts", 73 price: { value: 276 }, 74 }, 75 }, 76 }); 77 78 // Should now be in the cache. 79 Assert.deepEqual( 80 PageDataService.getCached(url), 81 { 82 url, 83 date: 32453456, 84 data: { 85 [PageDataSchema.DATA_TYPE.PRODUCT]: { 86 name: "Bolts", 87 price: { value: 276 }, 88 }, 89 }, 90 }, 91 "Should have cached the data" 92 ); 93 94 PageDataService.unlockEntry(actor, url); 95 96 Assert.equal( 97 PageDataService.getCached(url), 98 null, 99 "Should have dropped the data from the cache." 100 ); 101 });