Revision control

Copy as Markdown

Other Tools

/* 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);
});
const storage = getStorageCal();
const 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");
const storageItem = createEventFromIcalString(str);
const 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];
const item = await storage.getItem(addedItemId);
// Check start date
equal(item.startDate.compare(cal.createDateTime("20120101T010101Z")), 0);
// Check attachment
const attaches = item.getAttachments();
const 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
const attendees = item.getAttendees();
const 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
const relations = item.getRelations();
const rel = relations[0];
equal(relations.length, 1);
equal(rel.relType, "SIBLING");
equal(rel.relId, "VALUE");
equal(rel.getParameter("FOO"), "BAR");
// Check recurrence item
for (const 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);
}
}
});