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.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
355
gaia/apps/calendar/test/unit/day_observer_test.js
Executable file
355
gaia/apps/calendar/test/unit/day_observer_test.js
Executable file
|
|
@ -0,0 +1,355 @@
|
|||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var Factory = require('test/support/factory');
|
||||
var core = require('core');
|
||||
var dayObserver = require('day_observer');
|
||||
|
||||
suite('day_observer', function() {
|
||||
var busyToday1, busyToday2, busyTomorrow, busyTodayAllday;
|
||||
var event1, event2, event3, event4;
|
||||
var calendar, hiddenCalendar;
|
||||
var calendarColor = '#00aacc';
|
||||
var hiddenCalendarColor = '#BADA55';
|
||||
var busytimeStore, calendarStore, eventStore;
|
||||
var subject;
|
||||
var today;
|
||||
var tomorrow;
|
||||
var yesterday;
|
||||
var oneHour = 60 * 60 * 1000;
|
||||
|
||||
suiteSetup(function(done) {
|
||||
subject = dayObserver;
|
||||
var storeFactory = core.storeFactory;
|
||||
eventStore = storeFactory.get('Event');
|
||||
busytimeStore = storeFactory.get('Busytime');
|
||||
calendarStore = storeFactory.get('Calendar');
|
||||
|
||||
|
||||
today = new Date();
|
||||
today.setHours(8, 0, 0, 0);
|
||||
// Set the date to the 15th, so it's in the middle of the month.
|
||||
// This helps avoid bug 1128172.
|
||||
var DAY = 15;
|
||||
today.setDate(DAY);
|
||||
|
||||
yesterday = new Date();
|
||||
yesterday.setHours(8, 0, 0, 0);
|
||||
yesterday.setDate(DAY - 1);
|
||||
|
||||
tomorrow = new Date();
|
||||
tomorrow.setHours(8, 0, 0, 0);
|
||||
tomorrow.setDate(DAY + 1);
|
||||
|
||||
core.db.open(done);
|
||||
});
|
||||
|
||||
suiteSetup(function(done) {
|
||||
calendarStore.all((err) => {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
// we add the events to the DB before calling subject.init() on purpose, just
|
||||
// to simulate the app start
|
||||
suiteSetup(function(done) {
|
||||
calendar = Factory('calendar', {
|
||||
localDisplayed: true,
|
||||
color: calendarColor
|
||||
});
|
||||
hiddenCalendar = Factory('calendar', {
|
||||
localDisplayed: false,
|
||||
color: hiddenCalendarColor
|
||||
});
|
||||
|
||||
var calendarId = calendar._id;
|
||||
|
||||
event1 = Factory('event', {
|
||||
_id: 'foo',
|
||||
calendarId: calendarId
|
||||
});
|
||||
event2 = Factory('event', {
|
||||
_id: 'bar',
|
||||
calendarId: calendarId
|
||||
});
|
||||
event3 = Factory('event', {
|
||||
_id: 'baz',
|
||||
calendarId: calendarId
|
||||
});
|
||||
event4 = Factory('event', {
|
||||
_id: 'bag',
|
||||
calendarId: calendarId
|
||||
});
|
||||
|
||||
busyToday1 = Factory('busytime', {
|
||||
calendarId: calendarId,
|
||||
eventId: event1._id,
|
||||
startDate: today
|
||||
});
|
||||
|
||||
// tests events that spans thru multiple days
|
||||
busyToday2 = Factory('busytime', {
|
||||
calendarId: calendarId,
|
||||
eventId: event2._id,
|
||||
startDate: new Date(today.getTime() + oneHour),
|
||||
endDate: tomorrow
|
||||
});
|
||||
|
||||
busyTomorrow = Factory('busytime', {
|
||||
calendarId: calendarId,
|
||||
eventId: event3._id,
|
||||
startDate: tomorrow
|
||||
});
|
||||
|
||||
var todayStart = new Date(today.getTime());
|
||||
todayStart.setHours(0, 0, 0, 0);
|
||||
var tomorrowStart = new Date(todayStart.getTime());
|
||||
tomorrowStart.setHours(24);
|
||||
busyTodayAllday = Factory('busytime', {
|
||||
calendarId: calendarId,
|
||||
eventId: event4._id,
|
||||
startDate: todayStart,
|
||||
endDate: tomorrowStart
|
||||
});
|
||||
|
||||
// events should be persisted before the busytimes
|
||||
Promise.all([
|
||||
calendarStore.persist(calendar),
|
||||
calendarStore.persist(hiddenCalendar),
|
||||
eventStore.persist(event1),
|
||||
eventStore.persist(event2),
|
||||
eventStore.persist(event3),
|
||||
eventStore.persist(event4)
|
||||
]).then(function() {
|
||||
Promise.all([
|
||||
busytimeStore.persist(busyToday1),
|
||||
busytimeStore.persist(busyToday2),
|
||||
busytimeStore.persist(busyTomorrow),
|
||||
busytimeStore.persist(busyTodayAllday)
|
||||
]).then(function() {
|
||||
subject.init();
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function(done) {
|
||||
testSupport.calendar.clearStore(
|
||||
core.db,
|
||||
['events', 'busytimes', 'calendars'],
|
||||
done
|
||||
);
|
||||
});
|
||||
|
||||
suiteTeardown(function() {
|
||||
core.db.close();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
subject.removeAllListeners();
|
||||
});
|
||||
|
||||
suite('empty cache', function() {
|
||||
test('#on: today', function(done) {
|
||||
subject.on(today, function(records) {
|
||||
assert.equal(records.amount, 0);
|
||||
assert.deepEqual(records.basic, []);
|
||||
assert.deepEqual(records.allday, []);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('#findAssociated', function(done) {
|
||||
subject.findAssociated(busyTomorrow._id).then(function(record) {
|
||||
assert.deepEqual(record.busytime, busyTomorrow);
|
||||
assert.deepEqual(record.event, event3);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
suite('cached', function() {
|
||||
suiteSetup(function(done) {
|
||||
// make sure we wait enough time until all records are loaded from DB
|
||||
function onRecords(records) {
|
||||
if (records.amount > 0) {
|
||||
subject.off(today, onRecords);
|
||||
done();
|
||||
}
|
||||
}
|
||||
// ensures 'monthChange' triggers the load of busytimes, we are not
|
||||
// calling `move()` because this is more flexible and less error prone
|
||||
core.timeController.emit('monthChange', today);
|
||||
subject.on(today, onRecords);
|
||||
});
|
||||
|
||||
test('#on: today', function(done) {
|
||||
subject.on(today, function(records) {
|
||||
assert.equal(records.amount, 3);
|
||||
assert.deepEqual(records.basic, [
|
||||
{
|
||||
event: event1,
|
||||
busytime: busyToday1,
|
||||
color: calendarColor
|
||||
},
|
||||
{
|
||||
event: event2,
|
||||
busytime: busyToday2,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
assert.deepEqual(records.allday, [
|
||||
{
|
||||
event: event4,
|
||||
busytime: busyTodayAllday,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('#on: tomorrow', function(done) {
|
||||
subject.on(tomorrow, function(records) {
|
||||
assert.equal(records.amount, 2);
|
||||
assert.deepEqual(records.basic, [
|
||||
{
|
||||
event: event2,
|
||||
busytime: busyToday2,
|
||||
color: calendarColor
|
||||
},
|
||||
{
|
||||
event: event3,
|
||||
busytime: busyTomorrow,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
assert.deepEqual(records.allday, []);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('#on: yesterday', function(done) {
|
||||
subject.on(yesterday, function(records) {
|
||||
assert.equal(records.amount, 0);
|
||||
assert.deepEqual(records.basic, []);
|
||||
assert.deepEqual(records.allday, []);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('#on: yesterday + persist + remove + visibility', function(done) {
|
||||
/* disabled due to intermittent failures see bug 1128275 */
|
||||
/* jshint -W027 */
|
||||
return done();
|
||||
|
||||
var count = 0;
|
||||
var busyYesterday = Factory('busytime', {
|
||||
calendarId: calendar._id,
|
||||
eventId: event3._id,
|
||||
startDate: yesterday
|
||||
});
|
||||
var busyYesterday2 = Factory('busytime', {
|
||||
calendarId: calendar._id,
|
||||
eventId: event4._id,
|
||||
startDate: new Date(yesterday.getTime() + oneHour)
|
||||
});
|
||||
// events from hidden calendars should not be displayed
|
||||
var busyYesterdayHidden = Factory('busytime', {
|
||||
calendarId: hiddenCalendar._id,
|
||||
eventId: event4._id,
|
||||
startDate: new Date(yesterday.getTime() + oneHour)
|
||||
});
|
||||
|
||||
subject.on(yesterday, function(records) {
|
||||
count += 1;
|
||||
|
||||
// it should call it once without the new events to make sure our views
|
||||
// are "eventually" in sync
|
||||
if (count === 1) {
|
||||
assert.equal(records.amount, 0, 'first');
|
||||
assert.deepEqual(records.basic, []);
|
||||
assert.deepEqual(records.allday, []);
|
||||
return;
|
||||
}
|
||||
|
||||
if (count === 2) {
|
||||
if (records.amount === 1) {
|
||||
// busytimeStore.persist is async and might take longer than
|
||||
// a single dispatch to display all the busytimes, so we make sure
|
||||
// we only bump the count if it really updated the value to match
|
||||
// the expected result. that is enough to prove that UI will
|
||||
// "eventually" reflect the correct amount of items. (Bug 1115083)
|
||||
count -= 1;
|
||||
return;
|
||||
}
|
||||
|
||||
assert.equal(records.amount, 2, 'after persist');
|
||||
assert.deepEqual(records.basic, [
|
||||
{
|
||||
event: event3,
|
||||
busytime: busyYesterday,
|
||||
color: calendarColor
|
||||
},
|
||||
{
|
||||
event: event4,
|
||||
busytime: busyYesterday2,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
assert.deepEqual(records.allday, []);
|
||||
// remove busytime
|
||||
busytimeStore.remove(busyYesterday2._id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (count === 3) {
|
||||
assert.equal(records.amount, 1, 'after remove');
|
||||
assert.deepEqual(records.basic, [
|
||||
{
|
||||
event: event3,
|
||||
busytime: busyYesterday,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
assert.deepEqual(records.allday, []);
|
||||
// toggle calendar visibility
|
||||
calendarStore.persist(Factory('calendar', {
|
||||
_id: hiddenCalendar._id,
|
||||
localDisplayed: true
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
assert.equal(records.amount, 2, 'after calendar visible');
|
||||
assert.deepEqual(records.basic, [
|
||||
{
|
||||
event: event3,
|
||||
busytime: busyYesterday,
|
||||
color: calendarColor
|
||||
},
|
||||
{
|
||||
event: event4,
|
||||
busytime: busyYesterdayHidden,
|
||||
color: calendarColor
|
||||
}
|
||||
]);
|
||||
assert.deepEqual(records.allday, []);
|
||||
done();
|
||||
});
|
||||
|
||||
busytimeStore.persist(busyYesterday);
|
||||
busytimeStore.persist(busyYesterday2);
|
||||
busytimeStore.persist(busyYesterdayHidden);
|
||||
});
|
||||
|
||||
test('#findAssociated', function(done) {
|
||||
subject.findAssociated(busyToday1._id).then(function(record) {
|
||||
assert.deepEqual(record.busytime, busyToday1);
|
||||
assert.deepEqual(record.event, event1);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue