VulpesOS/gaia/apps/calendar/test/marionette/server_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

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;
}