"use strict"; const { AppConstants } = ChromeUtils.importESModule( "resource://gre/modules/AppConstants.sys.mjs" ); const fooNotification = getNotificationObject( "foo", "a4f1d54a-98b7-4231-9120-5afc26545bad", null, true ); const barNotification = getNotificationObject( "bar", "a4f1d54a-98b7-4231-9120-5afc26545bad", "baz", true ); const msg = "Notification:GetAll"; const msgReply = "Notification:GetAll:Return:OK"; do_get_profile(); const OLD_STORE_PATH = PathUtils.join( PathUtils.profileDir, "notificationstore.json" ); let nextRequestID = 0; // Create the old datastore and populate it with data before we initialize // the notification database so it has data to migrate. This is a setup step, // not a test, but it seems like we need to do it in a test function // rather than in run_test() because the test runner doesn't handle async steps // in run_test(). add_task( { skip_if: () => !AppConstants.MOZ_NEW_NOTIFICATION_STORE, }, async function test_create_old_datastore() { const notifications = { [fooNotification.origin]: { [fooNotification.id]: fooNotification, }, [barNotification.origin]: { [barNotification.id]: barNotification, }, }; await IOUtils.writeJSON(OLD_STORE_PATH, notifications); startNotificationDB(); } ); add_test( { skip_if: () => !AppConstants.MOZ_NEW_NOTIFICATION_STORE, }, function test_get_system_notification() { const requestID = nextRequestID++; const msgHandler = function (message) { Assert.equal(requestID, message.data.requestID); Assert.equal(0, message.data.notifications.length); }; addAndSend(msg, msgReply, msgHandler, { origin: systemNotification.origin, requestID, }); } ); add_test( { skip_if: () => !AppConstants.MOZ_NEW_NOTIFICATION_STORE, }, function test_get_foo_notification() { const requestID = nextRequestID++; const msgHandler = function (message) { Assert.equal(requestID, message.data.requestID); Assert.equal(1, message.data.notifications.length); Assert.deepEqual( fooNotification, message.data.notifications[0], "Notification data migrated" ); }; addAndSend(msg, msgReply, msgHandler, { origin: fooNotification.origin, requestID, }); } ); add_test( { skip_if: () => !AppConstants.MOZ_NEW_NOTIFICATION_STORE, }, function test_get_bar_notification() { const requestID = nextRequestID++; const msgHandler = function (message) { Assert.equal(requestID, message.data.requestID); Assert.equal(1, message.data.notifications.length); Assert.deepEqual( barNotification, message.data.notifications[0], "Notification data migrated" ); }; addAndSend(msg, msgReply, msgHandler, { origin: barNotification.origin, requestID, }); } ); add_task( { skip_if: () => !AppConstants.MOZ_NEW_NOTIFICATION_STORE, }, async function test_old_datastore_deleted() { Assert.ok( !(await IOUtils.exists(OLD_STORE_PATH)), "old datastore no longer exists" ); } );