summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/browser/browser_eventDisplay_weekView.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/test/browser/browser_eventDisplay_weekView.js')
-rw-r--r--comm/calendar/test/browser/browser_eventDisplay_weekView.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/comm/calendar/test/browser/browser_eventDisplay_weekView.js b/comm/calendar/test/browser/browser_eventDisplay_weekView.js
new file mode 100644
index 0000000000..806105c29a
--- /dev/null
+++ b/comm/calendar/test/browser/browser_eventDisplay_weekView.js
@@ -0,0 +1,151 @@
+/* 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/. */
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ CalEvent: "resource:///modules/CalEvent.jsm",
+});
+
+var calendar = CalendarTestUtils.createCalendar();
+registerCleanupFunction(() => {
+ CalendarTestUtils.removeCalendar(calendar);
+});
+
+/**
+ * Create an event item in the calendar.
+ *
+ * @param {string} name - The name of the event.
+ * @param {string} start - The date time string for the start of the event.
+ * @param {string} end - The date time string for the end of the event.
+ *
+ * @returns {CalEvent} - The created event.
+ */
+async function createEvent(name, start, end) {
+ let event = new CalEvent();
+ event.title = name;
+ event.startDate = cal.createDateTime(start);
+ event.endDate = cal.createDateTime(end);
+ return calendar.addItem(event);
+}
+
+/**
+ * Assert that there is a an event in the week-view between the expected range,
+ * and no events on the other days.
+ *
+ * @param {object} date - The date to move to.
+ * @param {number} date.day - The day.
+ * @param {number} date.week - The week.
+ * @param {number} date.year - The year.
+ * @param {object} expect - Details about the expected event.
+ * @param {string} expect.name - The event name.
+ * @param {number} expect.start - The day that the event should start in the
+ * week. Between 1 and 7.
+ * @param {number} expect.end - The day that the event should end in the week.
+ * @param {boolean} expect.startInView - Whether the event starts within the
+ * view on the given date.
+ * @param {boolean} expect.endInView - Whether the event ends within the view
+ * on the given date.
+ * @param {string} message - A message to use in assertions.
+ */
+async function assertWeekEvents(date, expect, message) {
+ await CalendarTestUtils.goToDate(window, date.year, date.month, date.day);
+ // First test for expected events since these can take a short while to load,
+ // and we don't want to test for the absence of an event before they show.
+ for (let day = expect.start; day <= expect.end; day++) {
+ let element = await CalendarTestUtils.weekView.waitForEventBoxAt(window, day, 1);
+ Assert.equal(
+ element.querySelector(".event-name-label").textContent,
+ expect.name,
+ `Day ${day} event name should match: ${message}`
+ );
+ let icon = element.querySelector(".item-recurrence-icon");
+ Assert.equal(icon.src, "");
+ Assert.ok(icon.hidden);
+ await CalendarTestUtils.assertEventBoxDraggable(
+ element,
+ expect.startInView && day == expect.start,
+ expect.endInView && day == expect.end,
+ `Day ${day}: ${message}`
+ );
+ }
+ // Test no events loaded on the other days.
+ for (let day = 1; day <= 7; day++) {
+ if (day >= expect.start && day <= expect.end) {
+ continue;
+ }
+ Assert.equal(
+ CalendarTestUtils.weekView.getEventBoxes(window, day).length,
+ 0,
+ `Should be no events on day ${day}: ${message}`
+ );
+ }
+}
+
+/**
+ * Test an event that occurs within one week, in the week view.
+ */
+add_task(async function testInsideWeekView() {
+ let event = await createEvent("Test Event", "20190101T123400", "20190103T234500");
+ await CalendarTestUtils.setCalendarView(window, "week");
+ Assert.equal(
+ document.querySelectorAll("#week-view calendar-event-column").length,
+ 7,
+ "7 day columns in the week view"
+ );
+
+ await assertWeekEvents(
+ { day: 1, month: 1, year: 2019 },
+ { name: "Test Event", start: 3, end: 5, startInView: true, endInView: true },
+ "Single week event"
+ );
+
+ await CalendarTestUtils.closeCalendarTab(window);
+ await calendar.deleteItem(event);
+});
+
+/**
+ * Test an event that starts and ends at midnight, in the week view.
+ */
+add_task(async function testMidnightWeekView() {
+ // Spans three days.
+ let event = await createEvent("Test Event", "20190101T000000", "20190104T000000");
+ await CalendarTestUtils.setCalendarView(window, "week");
+
+ // Midnight-to-midnight event only spans one day even though the end time
+ // matches the starting time of the next day (midnight).
+ await assertWeekEvents(
+ { day: 1, month: 1, year: 2019 },
+ { name: "Test Event", start: 3, end: 5, startInView: true, endInView: true },
+ "Midnight week event"
+ );
+
+ await CalendarTestUtils.closeCalendarTab(window);
+ await calendar.deleteItem(event);
+});
+
+/**
+ * Test an event that spans multiple weeks, in the week view.
+ */
+add_task(async function testOutsideWeekView() {
+ let event = await createEvent("Test Event", "20190402T123400", "20190418T234500");
+ await CalendarTestUtils.setCalendarView(window, "week");
+
+ await assertWeekEvents(
+ { day: 3, month: 4, year: 2019 },
+ { name: "Test Event", start: 3, end: 7, startInView: true, endInView: false },
+ "First week"
+ );
+ await assertWeekEvents(
+ { day: 10, month: 4, year: 2019 },
+ { name: "Test Event", start: 1, end: 7, startInView: false, endInView: false },
+ "Middle week"
+ );
+ await assertWeekEvents(
+ { day: 17, month: 4, year: 2019 },
+ { name: "Test Event", start: 1, end: 5, startInView: false, endInView: true },
+ "Last week"
+ );
+
+ await CalendarTestUtils.closeCalendarTab(window);
+ await calendar.deleteItem(event);
+});