summaryrefslogtreecommitdiffstats
path: root/comm/mail/services/sync/test/unit/test_calendar_store.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/services/sync/test/unit/test_calendar_store.js')
-rw-r--r--comm/mail/services/sync/test/unit/test_calendar_store.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/comm/mail/services/sync/test/unit/test_calendar_store.js b/comm/mail/services/sync/test/unit/test_calendar_store.js
new file mode 100644
index 0000000000..41dd01c22a
--- /dev/null
+++ b/comm/mail/services/sync/test/unit/test_calendar_store.js
@@ -0,0 +1,180 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at http://mozilla.org/MPL/2.0/. */
+
+do_get_profile();
+
+const { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+const { CalendarsEngine, CalendarRecord } = ChromeUtils.importESModule(
+ "resource://services-sync/engines/calendars.sys.mjs"
+);
+const { Service } = ChromeUtils.importESModule(
+ "resource://services-sync/service.sys.mjs"
+);
+
+let engine, store, tracker;
+let calDAVCalendar, icsCalendar, fileICSCalendar, storageCalendar;
+
+// TODO test caldav calendars
+
+add_setup(async function () {
+ await new Promise(resolve => cal.manager.startup({ onResult: resolve }));
+
+ engine = new CalendarsEngine(Service);
+ await engine.initialize();
+ store = engine._store;
+
+ calDAVCalendar = cal.manager.createCalendar(
+ "caldav",
+ Services.io.newURI("https://localhost/caldav")
+ );
+ calDAVCalendar.name = "CalDAV Calendar";
+ cal.manager.registerCalendar(calDAVCalendar);
+
+ icsCalendar = cal.manager.createCalendar(
+ "ics",
+ Services.io.newURI("https://localhost/ics")
+ );
+ icsCalendar.name = "ICS Calendar";
+ cal.manager.registerCalendar(icsCalendar);
+
+ fileICSCalendar = cal.manager.createCalendar(
+ "ics",
+ Services.io.newURI("file:///home/user/test.ics")
+ );
+ fileICSCalendar.name = "File ICS Calendar";
+ cal.manager.registerCalendar(fileICSCalendar);
+
+ storageCalendar = cal.manager.createCalendar(
+ "storage",
+ Services.io.newURI("moz-storage-calendar://")
+ );
+ storageCalendar.name = "Storage Calendar";
+ cal.manager.registerCalendar(storageCalendar);
+});
+
+add_task(async function testGetAllIDs() {
+ Assert.deepEqual(await store.getAllIDs(), {
+ [calDAVCalendar.id]: true,
+ [icsCalendar.id]: true,
+ });
+});
+
+add_task(async function testItemExists() {
+ Assert.equal(await store.itemExists(calDAVCalendar.id), true);
+ Assert.equal(await store.itemExists(icsCalendar.id), true);
+});
+
+add_task(async function testCreateCalDAVRecord() {
+ let record = await store.createRecord(calDAVCalendar.id);
+ Assert.ok(record instanceof CalendarRecord);
+ Assert.equal(record.id, calDAVCalendar.id);
+ Assert.equal(record.name, "CalDAV Calendar");
+ Assert.equal(record.type, "caldav");
+ Assert.equal(record.uri, "https://localhost/caldav");
+ Assert.deepEqual(record.prefs, {});
+});
+
+add_task(async function testCreateICSRecord() {
+ let record = await store.createRecord(icsCalendar.id);
+ Assert.ok(record instanceof CalendarRecord);
+ Assert.equal(record.id, icsCalendar.id);
+ Assert.equal(record.name, "ICS Calendar");
+ Assert.equal(record.type, "ics");
+ Assert.equal(record.uri, "https://localhost/ics");
+ Assert.deepEqual(record.prefs, {});
+});
+
+add_task(async function testCreateDeletedRecord() {
+ let fakeID = "12345678-1234-1234-1234-123456789012";
+ let record = await store.createRecord(fakeID);
+ Assert.ok(record instanceof CalendarRecord);
+ Assert.equal(record.id, fakeID);
+ Assert.equal(record.deleted, true);
+});
+
+add_task(async function testSyncRecords() {
+ // Sync a new calendar.
+
+ let newID = newUID();
+ await store.applyIncoming({
+ id: newID,
+ name: "New ICS Calendar",
+ type: "ics",
+ uri: "https://localhost/newICS",
+ prefs: {
+ color: "#abcdef",
+ },
+ });
+
+ Assert.equal(cal.manager.getCalendars().length, 5);
+ let calendar = cal.manager.getCalendarById(newID);
+ Assert.equal(calendar.id, newID);
+ Assert.equal(calendar.name, "New ICS Calendar");
+ Assert.equal(calendar.type, "ics");
+ Assert.equal(calendar.uri.spec, "https://localhost/newICS");
+ Assert.equal(calendar.getProperty("color"), "#abcdef");
+
+ // Change the name and some properties.
+
+ await store.applyIncoming({
+ id: newID,
+ name: "Changed ICS Calendar",
+ type: "ics",
+ uri: "https://localhost/changedICS",
+ prefs: {
+ color: "#123456",
+ readOnly: true,
+ },
+ });
+
+ Assert.equal(cal.manager.getCalendars().length, 5);
+ calendar = cal.manager.getCalendarById(newID);
+ Assert.equal(calendar.name, "Changed ICS Calendar");
+ Assert.equal(calendar.type, "ics");
+ Assert.equal(calendar.uri.spec, "https://localhost/changedICS");
+ Assert.equal(calendar.getProperty("color"), "#123456");
+ Assert.equal(calendar.getProperty("readOnly"), true);
+
+ // Change the calendar type. This should fail.
+
+ await Assert.rejects(
+ store.applyIncoming({
+ id: newID,
+ name: "New CalDAV Calendar",
+ type: "caldav",
+ uri: "https://localhost/caldav",
+ prefs: {
+ color: "#123456",
+ readOnly: true,
+ },
+ }),
+ /Refusing to change calendar type/
+ );
+
+ // Enable the cache. This should fail.
+
+ await Assert.rejects(
+ store.applyIncoming({
+ id: newID,
+ name: "Changed ICS Calendar",
+ type: "ics",
+ uri: "https://localhost/changedICS",
+ prefs: {
+ cacheEnabled: true,
+ color: "#123456",
+ readOnly: true,
+ },
+ }),
+ /Refusing to change the cache setting/
+ );
+
+ await store.applyIncoming({
+ id: newID,
+ deleted: true,
+ });
+
+ Assert.equal(cal.manager.getCalendars().length, 4);
+ calendar = cal.manager.getCalendarById(newID);
+ Assert.equal(calendar, null);
+});