Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
241 lines
6.2 KiB
JavaScript
Executable file
241 lines
6.2 KiB
JavaScript
Executable file
/* global require, marionette, setup, suite, teardown, test */
|
|
'use strict';
|
|
|
|
var Calendar = require('./lib/calendar'),
|
|
Radicale = require('./lib/radicale'),
|
|
assert = require('chai').assert,
|
|
debug = require('common/debug')('marionette:server_test');
|
|
|
|
var calendarName = 'firefox-os';
|
|
|
|
marionette('interop basic', function() {
|
|
var app, server;
|
|
var client = marionette.client({
|
|
desiredCapabilities: { raisesAccessibilityExceptions: false }
|
|
});
|
|
|
|
var vanillaEvent = Object.freeze({
|
|
title: 'Vanilla event',
|
|
location: 'Baskin Robbins',
|
|
description: 'What better a place for a vanilla event!',
|
|
calendar: calendarName,
|
|
startHour: 17,
|
|
reminders: []
|
|
});
|
|
|
|
var allDayEvent = Object.freeze({
|
|
title: 'All day event',
|
|
location: 'Planet Earth',
|
|
description: 'Except for the mars rover!',
|
|
calendar: calendarName,
|
|
allDay: true,
|
|
reminders: []
|
|
});
|
|
|
|
var eventWithAlarms = Object.freeze({
|
|
title: 'Event with alarms',
|
|
location: 'Fire Station',
|
|
description: 'Wee-Woo-Wee-Woo-Wee-Woo',
|
|
calendar: calendarName,
|
|
startHour: 10,
|
|
reminders: ['5 minutes before', '1 hour before']
|
|
});
|
|
|
|
var vanillaElement, allDayElement, elementWithAlarms;
|
|
|
|
function onServerUp(callback) {
|
|
debug('Launch calendar.');
|
|
app = new Calendar(client);
|
|
app.launch();
|
|
|
|
app.setupAccount({
|
|
accountType: 'caldav',
|
|
user: calendarName,
|
|
fullUrl: 'http://127.0.0.1:' + server.port + '/' + calendarName
|
|
});
|
|
|
|
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;
|
|
}
|
|
});
|
|
|
|
callback();
|
|
}
|
|
|
|
suite('server', function() {
|
|
setup(function(done) {
|
|
// Start server if it's not already up.
|
|
if (server) {
|
|
return onServerUp(done);
|
|
}
|
|
|
|
server = new Radicale();
|
|
server.start(function() {
|
|
onServerUp(done);
|
|
});
|
|
});
|
|
|
|
teardown(function() {
|
|
debug('Delete account from calendar app.');
|
|
app.teardownAccount(calendarName);
|
|
// Now make sure that the account was actually deleted (see bug 1036753)
|
|
var synced = getCalendars(app);
|
|
assert.notInclude(synced, calendarName, 'calendar should be deleted');
|
|
});
|
|
|
|
|
|
/**
|
|
* 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.');
|
|
app.sync();
|
|
});
|
|
|
|
|
|
test('should get calendar', function() {
|
|
var synced = getCalendars(app);
|
|
assert.include(synced, calendarName, calendarName + ' should be 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);
|
|
debug('Found ' + event.title.trim());
|
|
return event.title.trim() === created.title;
|
|
})
|
|
);
|
|
});
|
|
});
|
|
|
|
// TODO(gareth): Fix me!
|
|
test.skip('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'
|
|
);
|
|
});
|
|
|
|
// TODO(gareth): Fix me!
|
|
test.skip('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(done) {
|
|
// TODO(gareth): Should be able to delete test data
|
|
// from within calendar app.
|
|
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.');
|
|
app.sync();
|
|
*/
|
|
try {
|
|
server.removeAllEvents();
|
|
} catch (error) {
|
|
console.error(error.toString());
|
|
} finally {
|
|
server.close(done);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
function getCalendars(app) {
|
|
debug('Reading list of calendars from settings view.');
|
|
app.openSettingsView();
|
|
var synced = app.settings.calendars();
|
|
app.closeSettingsView();
|
|
return synced;
|
|
}
|