VulpesOS/gaia/apps/calendar/test/unit/models/event_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

297 lines
6.9 KiB
JavaScript
Executable file

define(function(require) {
'use strict';
var Calc = require('common/calc');
var Event = require('models/event');
var Factory = require('test/support/factory');
suite('Models.Event', function() {
var subject;
var rawEvent;
var remote;
var start;
var end;
var originalDates;
suiteSetup(function() {
start = new Date(2012, 0, 1);
end = new Date(2012, 0, 1, 12);
originalDates = {
start: start,
end: end
};
});
setup(function() {
rawEvent = Factory.create('event', {
remote: {
syncToken: '7ee',
startDate: start,
endDate: end,
start: Calc.dateToTransport(start),
end: Calc.dateToTransport(end)
}
});
remote = rawEvent.remote;
subject = new Event(rawEvent);
});
suite('initialization', function() {
test('from existing model', function() {
assert.equal(subject.data, rawEvent);
});
test('from existing "allday" model', function() {
var data = Factory.build('event', {
remote: {
startDate: new Date(2012, 1, 1),
endDate: new Date(2012, 1, 2)
}
});
var subject = new Event(data);
assert.isTrue(subject.isAllDay, 'is all day');
});
test('from existing model without .startDate/.endDate', function() {
var event = new Event();
var start = new Date(2012, 0, 1);
var end = new Date(2012, 0, 5);
event.startDate = start;
event.endDate = end;
var data = event.data;
delete data.remote.startDate;
delete data.remote.endDate;
var newEvent = new Event(data);
assert.deepEqual(newEvent.startDate, start);
assert.deepEqual(newEvent.endDate, end);
});
test('from new model', function() {
subject = new Event();
assert.ok(subject.data, 'has data');
assert.ok(subject.data.remote, 'has remote');
assert.instanceOf(
subject.startDate,
Date,
'pre-populates start date'
);
assert.instanceOf(
subject.endDate,
Date,
'pre-populates end date'
);
});
});
function remoteSetter(type) {
test('#' + type + ' setter/getter', function() {
var value = 'foo';
subject[type] = value;
assert.equal(rawEvent.remote[type], value, 'raw data ' + type);
assert.equal(subject[type], value, 'get ' + type);
});
}
// need a var for gjslint parse error?
var dateFields = ['start', 'end'];
dateFields.forEach(function(field) {
var remoteDateField = field + 'Date';
suite('#' + remoteDateField, function() {
test('initial value', function() {
assert.deepEqual(
originalDates[field],
subject[remoteDateField]
);
});
test('set value', function() {
var date = new Date(2012, 0, 1, 2);
var transport = Calc.dateToTransport(date);
subject[remoteDateField] = date;
assert.deepEqual(
remote[remoteDateField],
date,
remoteDateField
);
assert.deepEqual(
remote[field],
transport,
field
);
});
test('prevents non-date values when isAllDay', function() {
subject.isAllDay = true;
var date = new Date(2012, 1, 1, 1, 5);
var expected = new Date(2012, 1, 1);
var transport = Calc.dateToTransport(
expected, null, true
);
subject[remoteDateField] = date;
assert.deepEqual(
subject[remoteDateField],
expected,
'date'
);
assert.deepEqual(
subject.remote[field],
transport,
'trasport'
);
});
test('clears when is .allDay', function() {
subject.isAllDay = true;
assert.isTrue(
Calc.isOnlyDate(subject[remoteDateField]),
'is only date'
);
assert.isTrue(
subject.remote[field].isDate,
'is date'
);
});
});
});
test('#isAllDay', function() {
subject.isAllDay = true;
assert.isTrue(
Calc.isOnlyDate(subject.startDate),
'removes time from start'
);
assert.isTrue(
Calc.isOnlyDate(subject.endDate),
'removes time from end'
);
assert.isTrue(
subject.remote.start.isDate,
'sets start to date'
);
assert.isTrue(
subject.remote.end.isDate,
'sets end to date'
);
});
test('#calendarId', function() {
subject.calendarId = 7;
assert.equal(rawEvent.calendarId, 7);
assert.equal(subject.calendarId, 7);
});
test('#calendarId with string input', function() {
subject.calendarId = '7';
assert.strictEqual(rawEvent.calendarId, 7);
assert.strictEqual(subject.calendarId, 7);
});
test('#_id', function() {
rawEvent._id = 'foo';
assert.equal(subject._id, 'foo');
});
suite('#validationErrors', function() {
test('no errors', function() {
var event = new Event();
event.startDate = new Date(2012, 0, 1);
event.endDate = new Date(2012, 0, 2);
assert.ok(!event.validationErrors(), 'has no errors');
});
function hasError(event, type) {
var errors = event.validationErrors();
assert.lengthOf(errors, 1);
assert.deepEqual(
errors[0], {
name: type
},
'has error: "' + type + '"'
);
}
test('start date >(=) end date', function() {
var event = new Event();
event.startDate = new Date(2020, 0, 2);
event.endDate = new Date(2012, 0, 1);
// start date > end date
hasError(event, 'start-after-end');
// start date == end date
event.startDate = new Date(event.endDate.valueOf());
hasError(event, 'start-after-end');
});
});
suite('update attributes', function() {
var eventWithoutErrors;
var eventWithErrors;
var event;
var model;
setup(function() {
event = Factory.create('event', {
remote: {
syncToken: '7ee',
startDate: new Date(2019, 1, 2),
endDate: new Date(2020, 0, 2),
start: Calc.dateToTransport(start),
end: Calc.dateToTransport(end)
}
});
model = new Event(event);
eventWithoutErrors = {
startDate: new Date(2019, 1, 2),
endDate: new Date(2020, 1, 2)
};
eventWithErrors = {
startDate: new Date(2019, 1, 2),
endDate: new Date(2019, 0, 2)
};
});
test('does not update attributes', function() {
var errors = model.updateAttributes(eventWithErrors);
assert.ok(errors);
assert.deepEqual(errors[0].name, 'start-after-end');
});
test('will update attributes', function() {
var errors = model.updateAttributes(eventWithoutErrors);
assert.strictEqual(errors, true);
assert.deepEqual(model.endDate, eventWithoutErrors.endDate);
});
});
remoteSetter('syncToken');
remoteSetter('location');
remoteSetter('description');
remoteSetter('title');
remoteSetter('alarms');
});
});