Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
231 lines
6.2 KiB
JavaScript
Executable file
231 lines
6.2 KiB
JavaScript
Executable file
/* global __dirname, require, marionette, setup, suite, teardown, test */
|
|
'use strict';
|
|
|
|
var Calendar = require('../marionette/lib/calendar'),
|
|
assert = require('chai').assert,
|
|
debug = require('common/debug')('interop:basic'),
|
|
fs = require('fs'),
|
|
path = require('path');
|
|
|
|
// See https://bugzil.la/1011192 about Yahoo!
|
|
var providers = [
|
|
'oracle'
|
|
];
|
|
|
|
marionette('interop basic', function() {
|
|
var app;
|
|
var client = marionette.client();
|
|
|
|
providers.forEach(function(provider) {
|
|
var config = JSON.parse(
|
|
fs.readFileSync(
|
|
path.join(__dirname, provider, 'config.json')
|
|
)
|
|
);
|
|
|
|
var vanillaEvent = Object.freeze({
|
|
title: 'Vanilla event',
|
|
location: 'Baskin Robbins',
|
|
description: 'What better a place for a vanilla event!',
|
|
calendar: config.calendars[0],
|
|
startHour: 17,
|
|
reminders: []
|
|
});
|
|
|
|
var allDayEvent = Object.freeze({
|
|
title: 'All day event',
|
|
location: 'Planet Earth',
|
|
description: 'Except for the mars rover!',
|
|
calendar: config.calendars[0],
|
|
allDay: true,
|
|
reminders: []
|
|
});
|
|
|
|
var eventWithAlarms = Object.freeze({
|
|
title: 'Event with alarms',
|
|
location: 'Fire Station',
|
|
description: 'Wee-Woo-Wee-Woo-Wee-Woo',
|
|
calendar: config.calendars[0],
|
|
startHour: 10,
|
|
reminders: ['5 minutes before', '1 hour before']
|
|
});
|
|
|
|
var vanillaElement, allDayElement, elementWithAlarms;
|
|
|
|
suite(provider, function() {
|
|
setup(function() {
|
|
debug('Launch calendar.');
|
|
app = new Calendar(client);
|
|
app.launch();
|
|
|
|
app.setupAccount(setupOptions(provider, config));
|
|
|
|
app.monthDay.events.forEach(function(event) {
|
|
switch (event.title.trim()) {
|
|
case vanillaEvent.title:
|
|
vanillaElement = event;
|
|
break;
|
|
case allDayEvent.title:
|
|
allDayElement = event;
|
|
break;
|
|
case eventWithAlarms.title:
|
|
elementWithAlarms = event;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
|
|
teardown(function() {
|
|
debug('Delete account from calendar app.');
|
|
app.teardownAccount(config.user);
|
|
});
|
|
|
|
|
|
/**
|
|
* Major hack around suiteSetup not being fully supported
|
|
* in marionette-js-runner.
|
|
*/
|
|
test('suiteSetup', function() {
|
|
debug('Create test data.');
|
|
[
|
|
vanillaEvent,
|
|
allDayEvent,
|
|
eventWithAlarms
|
|
].forEach(function(event) {
|
|
app.createEvent(event);
|
|
});
|
|
|
|
debug('Sync created data to ' + provider + '.');
|
|
app.sync();
|
|
});
|
|
|
|
|
|
test('should get all calendars', function() {
|
|
debug('Reading list of calendars from settings view.');
|
|
app.openSettingsView();
|
|
var synced = app.settings.calendars();
|
|
app.closeSettingsView();
|
|
config.calendars.forEach(function(calendar) {
|
|
debug('Looking for ' + calendar + '.');
|
|
assert.include(synced, calendar, calendar + ' synced');
|
|
});
|
|
});
|
|
|
|
test('should get existing events', function() {
|
|
var events = app.monthDay.events;
|
|
[
|
|
vanillaEvent,
|
|
allDayEvent,
|
|
eventWithAlarms
|
|
].forEach(function(created) {
|
|
debug('Looking for event titled ' + created.title + '.');
|
|
assert.ok(
|
|
events.some(function(event) {
|
|
app.monthDay.scrollToEvent(event);
|
|
return event.title.trim() === created.title;
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
test('event start times', function() {
|
|
assert.strictEqual(
|
|
vanillaElement.closestHour,
|
|
vanillaEvent.startHour
|
|
);
|
|
assert.strictEqual(
|
|
elementWithAlarms.closestHour,
|
|
eventWithAlarms.startHour
|
|
);
|
|
// Make sure that we are inside an all day element.
|
|
assert.ok(
|
|
!!allDayElement.closestAllDay,
|
|
'should recognize all day events'
|
|
);
|
|
});
|
|
|
|
test('event descriptions', function() {
|
|
[
|
|
{ element: vanillaElement, event: vanillaEvent },
|
|
{ element: allDayElement, event: allDayEvent },
|
|
{ element: elementWithAlarms, event: eventWithAlarms }
|
|
].forEach(function(obj) {
|
|
var element = obj.element,
|
|
event = obj.event;
|
|
app.monthDay.scrollToEvent(element);
|
|
element.click();
|
|
app.readEvent.waitForDisplay();
|
|
assert.strictEqual(
|
|
app.readEvent.description.trim(),
|
|
event.description
|
|
);
|
|
|
|
app.readEvent.cancel();
|
|
app.month.waitForDisplay();
|
|
});
|
|
});
|
|
|
|
test('event locations', function() {
|
|
assert.strictEqual(
|
|
vanillaElement.address.trim(),
|
|
vanillaEvent.location
|
|
);
|
|
assert.strictEqual(
|
|
allDayElement.address.trim(),
|
|
allDayEvent.location
|
|
);
|
|
assert.strictEqual(
|
|
elementWithAlarms.address.trim(),
|
|
eventWithAlarms.location
|
|
);
|
|
});
|
|
|
|
test('event alarms', function() {
|
|
assert.isFalse(vanillaElement.hasAlarms());
|
|
assert.isFalse(allDayElement.hasAlarms());
|
|
assert.isTrue(elementWithAlarms.hasAlarms());
|
|
});
|
|
|
|
test('suiteTeardown', function() {
|
|
debug('Delete test data.');
|
|
var events = app.monthDay.events;
|
|
events.forEach(function(event) {
|
|
app.monthDay.scrollToEvent(event);
|
|
event.click();
|
|
app.readEvent.waitForDisplay();
|
|
if (app.readEvent.editable) {
|
|
app.readEvent.edit();
|
|
app.editEvent.waitForDisplay();
|
|
app.editEvent.delete();
|
|
} else {
|
|
app.readEvent.cancel();
|
|
}
|
|
|
|
app.monthDay.waitForDisplay();
|
|
});
|
|
|
|
debug('Sync deletions to ' + provider + '.');
|
|
app.sync();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
function setupOptions(provider, config) {
|
|
debug('Authorize ' + provider + ' account.');
|
|
var options = {
|
|
user: config.user,
|
|
password: config.password,
|
|
accountType: provider
|
|
};
|
|
if (provider !== 'google' && provider !== 'yahoo') {
|
|
options.accountType = 'caldav';
|
|
}
|
|
if ('fullUrl' in config) {
|
|
options.fullUrl = config.fullUrl;
|
|
}
|
|
|
|
return options;
|
|
}
|