Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
297 lines
6.9 KiB
JavaScript
Executable file
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');
|
|
});
|
|
|
|
});
|