summaryrefslogtreecommitdiff
path: root/calendar/test/mozmill/testLocalICS.js
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/test/mozmill/testLocalICS.js')
-rw-r--r--calendar/test/mozmill/testLocalICS.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/calendar/test/mozmill/testLocalICS.js b/calendar/test/mozmill/testLocalICS.js
new file mode 100644
index 000000000..1a008ba5d
--- /dev/null
+++ b/calendar/test/mozmill/testLocalICS.js
@@ -0,0 +1,135 @@
+/* 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/. */
+
+var MODULE_NAME = "testLocalICS";
+var RELATIVE_ROOT = "./shared-modules";
+var MODULE_REQUIRES = ["calendar-utils", "window-helpers"];
+
+var calUtils = require("./shared-modules/calendar-utils");
+var modalDialog; // Initialized in setupModule
+Components.utils.import("resource://calendar/modules/calUtils.jsm");
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+var sleep = 500;
+var TIMEOUT_MODAL_DIALOG = 30000;
+var hour = 8;
+var calendar;
+var uri;
+var file;
+var title;
+
+var setupModule = function(module) {
+ controller = mozmill.getMail3PaneController();
+ modalDialog = collector.getModule("window-helpers");
+
+ // unique name needed as deleting a calendar only unsubscribes from it
+ // and if same file were used on next testrun then previously created event would show up
+ let time = (new Date()).getTime() + "";
+ calendar = time;
+ title = time;
+
+ file = Services.dirsvc.get("TmpD", Components.interfaces.nsIFile);
+ file.append(calendar + ".ics");
+ let fileURI = Services.io.newFileURI(file);
+ uri = fileURI.prePath + fileURI.path;
+};
+
+var testLocalICS = function() {
+ controller.click(new elementslib.ID(controller.window.document, "calendar-tab-button"));
+ calUtils.switchToView(controller, "day");
+
+ modalDialog.plan_for_modal_dialog("Calendar:NewCalendarWizard", handleNewCalendarWizard);
+ controller.mainMenu.click("#ltnNewCalendar");
+ modalDialog.wait_for_modal_dialog("Calendar:NewCalendarWizard", TIMEOUT_MODAL_DIALOG);
+
+ // create new event
+ controller.doubleClick(new elementslib.Lookup(controller.window.document,
+ calUtils.getEventBoxPath(controller, "day", calUtils.CANVAS_BOX, undefined, 1, hour)), 1, 1);
+ controller.waitFor(() => mozmill.utils.getWindows("Calendar:EventDialog").length > 0, sleep);
+ let event = new mozmill.controller.MozMillController(mozmill.utils
+ .getWindows("Calendar:EventDialog")[0]);
+
+ // let the iframe load
+ let iframe = event.window.document.getElementById("lightning-item-panel-iframe");
+ event.waitFor(() => iframe.contentWindow.onLoad && iframe.contentWindow.onLoad.hasLoaded == true);
+
+ // title
+ let titleTextBox = new elementslib.Lookup(iframe.contentDocument, '/id("calendar-event-dialog-inner")/' +
+ 'id("event-grid")/id("event-grid-rows")/id("event-grid-title-row")/' +
+ 'id("item-title")/anon({"class":"textbox-input-box"})/anon({"anonid":"input"})');
+ event.waitForElement(titleTextBox);
+ event.type(titleTextBox, title);
+
+ // set calendar
+ let itemCalendar = new elementslib.ID(event.window.document, "item-calendar");
+ event.select(itemCalendar, undefined, calendar);
+ // HACK - Wait for the value to be selected. This is needed for platforms
+ // like mac where selecting the menuitem is an asynchronous process, it might
+ // be fixed in a later version of mozmill.
+ event.waitFor(() => itemCalendar.getNode().value == calendar);
+
+ // save
+ event.click(new elementslib.ID(event.window.document, "button-saveandclose"));
+
+ // assert presence in view
+ let box = calUtils.getEventBoxPath(controller, "day", calUtils.EVENT_BOX, undefined, 1, hour) +
+ '/{"tooltip":"itemTooltip","calendar":"' + calendar + '"}';
+ controller.waitForElement(new elementslib.Lookup(controller.window.document, box));
+
+ // verify in file
+ let fstream = Components.classes["@mozilla.org/network/file-input-stream;1"]
+ .createInstance(Components.interfaces.nsIFileInputStream);
+ let cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
+ .createInstance(Components.interfaces.nsIConverterInputStream);
+
+ // wait a moment until file is written
+ let i = 0;
+ while (!file.exists() && i < 10) {
+ controller.sleep(sleep);
+ i++;
+ }
+
+ fstream.init(file, -1, 0, 0);
+ cstream.init(fstream, "UTF-8", 0, 0);
+
+ let str = {};
+ cstream.readString(-1, str);
+ cstream.close();
+
+ controller.assertJS(str.value.includes("SUMMARY:" + title));
+};
+
+var teardownTest = function(module) {
+ calUtils.deleteCalendars(controller, calendar);
+};
+
+function handleNewCalendarWizard(wizard) {
+ let docEl = wizard.window.document.documentElement;
+
+ // choose network calendar
+ let remoteOption = new elementslib.Lookup(wizard.window.document, '/id("calendar-wizard")/' +
+ '{"pageid":"initialPage"}/id("calendar-type")/{"value":"remote"}');
+ wizard.waitForElement(remoteOption);
+ wizard.radio(remoteOption);
+ docEl.getButton("next").doCommand();
+
+ // choose ical
+ let icalOption = new elementslib.Lookup(wizard.window.document, '/id("calendar-wizard")/' +
+ '{"pageid":"locationPage"}/[1]/[1]/[0]/id("calendar-format")/{"value":"ics"}');
+ wizard.waitForElement(icalOption);
+ wizard.radio(icalOption);
+ // enter location
+ wizard.type(new elementslib.Lookup(wizard.window.document, '/id("calendar-wizard")/' +
+ '{"pageid":"locationPage"}/[1]/[1]/{"align":"center"}/id("calendar-uri")/' +
+ 'anon({"class":"textbox-input-box"})/anon({"anonid":"input"})'),
+ uri);
+ docEl.getButton("next").doCommand();
+
+ // name is filled in automatically using filename
+ wizard.waitFor(() => docEl.getButton("next").disabled == false);
+ docEl.getButton("next").doCommand();
+
+ // finish
+ docEl.getButton("finish").doCommand();
+}