diff options
Diffstat (limited to 'comm/calendar/test/unit/test_storage.js')
-rw-r--r-- | comm/calendar/test/unit/test_storage.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/comm/calendar/test/unit/test_storage.js b/comm/calendar/test/unit/test_storage.js new file mode 100644 index 0000000000..d4a42be428 --- /dev/null +++ b/comm/calendar/test/unit/test_storage.js @@ -0,0 +1,85 @@ +/* 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/. */ + +add_task(async () => { + await new Promise(resolve => { + do_calendar_startup(resolve); + }); + + let storage = getStorageCal(); + let str = [ + "BEGIN:VEVENT", + "UID:attachItem", + "DTSTART:20120101T010101Z", + "ATTACH;FMTTYPE=text/calendar;ENCODING=BASE64;FILENAME=test.ics:http://example.com/test.ics", + "ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Name;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT;X-THING=BAR:mailto:test@example.com", + "RELATED-TO;RELTYPE=SIBLING;FOO=BAR:VALUE", + "RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5;BYDAY=MO", + "RDATE:20120201T010101Z", + "EXDATE:20120301T010101Z", + "END:VEVENT", + ].join("\r\n"); + + let storageItem = createEventFromIcalString(str); + + let addedItemId = (await storage.addItem(storageItem)).id; + + // Make sure the cache is cleared, otherwise we'll get the cached item. + delete storage.wrappedJSObject.mItemModel.itemCache[addedItemId]; + + let item = await storage.getItem(addedItemId); + + // Check start date + equal(item.startDate.compare(cal.createDateTime("20120101T010101Z")), 0); + + // Check attachment + let attaches = item.getAttachments(); + let attach = attaches[0]; + equal(attaches.length, 1); + equal(attach.uri.spec, "http://example.com/test.ics"); + equal(attach.formatType, "text/calendar"); + equal(attach.encoding, "BASE64"); + equal(attach.getParameter("FILENAME"), "test.ics"); + + // Check attendee + let attendees = item.getAttendees(); + let attendee = attendees[0]; + equal(attendees.length, 1); + equal(attendee.id, "mailto:test@example.com"); + equal(attendee.commonName, "Name"); + equal(attendee.rsvp, "TRUE"); + equal(attendee.isOrganizer, false); + equal(attendee.role, "REQ-PARTICIPANT"); + equal(attendee.participationStatus, "ACCEPTED"); + equal(attendee.userType, "INDIVIDUAL"); + equal(attendee.getProperty("X-THING"), "BAR"); + + // Check relation + let relations = item.getRelations(); + let rel = relations[0]; + equal(relations.length, 1); + equal(rel.relType, "SIBLING"); + equal(rel.relId, "VALUE"); + equal(rel.getParameter("FOO"), "BAR"); + + // Check recurrence item + for (let ritem of item.recurrenceInfo.getRecurrenceItems()) { + if (ritem instanceof Ci.calIRecurrenceRule) { + equal(ritem.type, "MONTHLY"); + equal(ritem.interval, 2); + equal(ritem.count, 5); + equal(ritem.isByCount, true); + equal(ritem.getComponent("BYDAY").toString(), [2].toString()); + equal(ritem.isNegative, false); + } else if (ritem instanceof Ci.calIRecurrenceDate) { + if (ritem.isNegative) { + equal(ritem.date.compare(cal.createDateTime("20120301T010101Z")), 0); + } else { + equal(ritem.date.compare(cal.createDateTime("20120201T010101Z")), 0); + } + } else { + do_throw("Found unknown recurrence item " + ritem); + } + } +}); |