summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/unit/test_bug494140.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/test/unit/test_bug494140.js')
-rw-r--r--comm/calendar/test/unit/test_bug494140.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/comm/calendar/test/unit/test_bug494140.js b/comm/calendar/test/unit/test_bug494140.js
new file mode 100644
index 0000000000..9a5baa6956
--- /dev/null
+++ b/comm/calendar/test/unit/test_bug494140.js
@@ -0,0 +1,57 @@
+/* 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/. */
+
+/**
+ * In bug 494140 we found out that creating an exception to a series duplicates
+ * alarms. This unit test makes sure the alarms don't duplicate themselves. The
+ * same goes for relations and attachments.
+ */
+add_task(async () => {
+ let storageCal = getStorageCal();
+
+ let item = createEventFromIcalString(
+ "BEGIN:VEVENT\r\n" +
+ "CREATED:20090603T171401Z\r\n" +
+ "LAST-MODIFIED:20090617T080410Z\r\n" +
+ "DTSTAMP:20090617T080410Z\r\n" +
+ "UID:c1a6cfe7-7fbb-4bfb-a00d-861e07c649a5\r\n" +
+ "SUMMARY:Test\r\n" +
+ "DTSTART:20090603T073000Z\r\n" +
+ "DTEND:20090603T091500Z\r\n" +
+ "RRULE:FREQ=DAILY;COUNT=5\r\n" +
+ "RELATED-TO:RELTYPE=SIBLING:<foo@example.org>\r\n" +
+ "ATTACH:http://www.example.org/\r\n" +
+ "BEGIN:VALARM\r\n" +
+ "ACTION:DISPLAY\r\n" +
+ "TRIGGER;VALUE=DURATION:-PT10M\r\n" +
+ "DESCRIPTION:Mozilla Alarm: Test\r\n" +
+ "END:VALARM\r\n" +
+ "END:VEVENT"
+ );
+
+ // There should be one alarm, one relation and one attachment
+ equal(item.getAlarms().length, 1);
+ equal(item.getRelations().length, 1);
+ equal(item.getAttachments().length, 1);
+
+ // Change the occurrence to another day
+ let occ = item.recurrenceInfo.getOccurrenceFor(cal.createDateTime("20090604T073000Z"));
+ occ.QueryInterface(Ci.calIEvent);
+ occ.startDate = cal.createDateTime("20090618T073000Z");
+ item.recurrenceInfo.modifyException(occ, true);
+
+ // There should still be one alarm, one relation and one attachment
+ equal(item.getAlarms().length, 1);
+ equal(item.getRelations().length, 1);
+ equal(item.getAttachments().length, 1);
+
+ // Add the item to the storage calendar and retrieve it again
+ await storageCal.adoptItem(item);
+
+ let retrievedItem = await storageCal.getItem("c1a6cfe7-7fbb-4bfb-a00d-861e07c649a5");
+ // There should still be one alarm, one relation and one attachment
+ equal(retrievedItem.getAlarms().length, 1);
+ equal(retrievedItem.getRelations().length, 1);
+ equal(retrievedItem.getAttachments().length, 1);
+});