summaryrefslogtreecommitdiffstats
path: root/dom/notification/test/unit/test_notificationdb_migration.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/notification/test/unit/test_notificationdb_migration.js')
-rw-r--r--dom/notification/test/unit/test_notificationdb_migration.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/dom/notification/test/unit/test_notificationdb_migration.js b/dom/notification/test/unit/test_notificationdb_migration.js
new file mode 100644
index 0000000000..2b38e8d43a
--- /dev/null
+++ b/dom/notification/test/unit/test_notificationdb_migration.js
@@ -0,0 +1,129 @@
+"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"
+ );
+ }
+);