summaryrefslogtreecommitdiffstats
path: root/dom/notification/test/unit/test_notificationdb_migration.js
blob: 2b38e8d43a7e6db79f14a87827cab49f24007a88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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"
    );
  }
);