2015-09-16 23:51:28 +00:00
|
|
|
/*****************************************************************************
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT, Copyright (c) 2014-2016, United States Government
|
2015-09-16 23:51:28 +00:00
|
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
|
|
* Administration. All rights reserved.
|
|
|
|
*
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
2015-09-16 23:51:28 +00:00
|
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
* License for the specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT includes source code licensed under additional open source
|
2015-09-16 23:51:28 +00:00
|
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
|
|
* this source code distribution or the Licensing information page available
|
|
|
|
* at runtime from the About dialog for additional information.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
define(
|
2015-12-29 21:59:06 +00:00
|
|
|
["../../src/controllers/DateTimePickerController", "moment"],
|
|
|
|
function (DateTimePickerController, moment) {
|
2015-09-16 23:51:28 +00:00
|
|
|
|
|
|
|
describe("The DateTimePickerController", function () {
|
|
|
|
var mockScope,
|
|
|
|
mockNow,
|
|
|
|
controller;
|
|
|
|
|
|
|
|
function fireWatch(expr, value) {
|
|
|
|
mockScope.$watch.calls.forEach(function (call) {
|
|
|
|
if (call.args[0] === expr) {
|
|
|
|
call.args[1](value);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-12-29 21:59:06 +00:00
|
|
|
function fireWatchCollection(expr, value) {
|
|
|
|
mockScope.$watchCollection.calls.forEach(function (call) {
|
|
|
|
if (call.args[0] === expr) {
|
|
|
|
call.args[1](value);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-09-16 23:51:28 +00:00
|
|
|
beforeEach(function () {
|
|
|
|
mockScope = jasmine.createSpyObj(
|
|
|
|
"$scope",
|
2016-05-19 18:29:13 +00:00
|
|
|
["$apply", "$watch", "$watchCollection"]
|
2015-09-16 23:51:28 +00:00
|
|
|
);
|
|
|
|
mockScope.ngModel = {};
|
|
|
|
mockScope.field = "testField";
|
|
|
|
mockNow = jasmine.createSpy('now');
|
|
|
|
controller = new DateTimePickerController(mockScope, mockNow);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("watches the model that was passed in", function () {
|
|
|
|
expect(mockScope.$watch).toHaveBeenCalledWith(
|
|
|
|
"ngModel[field]",
|
|
|
|
jasmine.any(Function)
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2015-12-29 21:59:06 +00:00
|
|
|
it("updates value in model when values in scope change", function () {
|
|
|
|
mockScope.date = {
|
|
|
|
year: 1998,
|
|
|
|
month: 0,
|
|
|
|
day: 6
|
|
|
|
};
|
|
|
|
mockScope.time = {
|
|
|
|
hours: 12,
|
|
|
|
minutes: 34,
|
|
|
|
seconds: 56
|
|
|
|
};
|
|
|
|
fireWatchCollection("date", mockScope.date);
|
|
|
|
expect(mockScope.ngModel[mockScope.field])
|
|
|
|
.toEqual(moment.utc("1998-01-06 12:34:56").valueOf());
|
|
|
|
});
|
2015-09-16 23:51:28 +00:00
|
|
|
|
2015-12-29 23:26:18 +00:00
|
|
|
describe("once initialized with model state", function () {
|
|
|
|
var testTime = moment.utc("1998-01-06 12:34:56").valueOf();
|
|
|
|
|
|
|
|
beforeEach(function () {
|
|
|
|
fireWatch("ngModel[field]", testTime);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("exposes date/time values in scope", function () {
|
|
|
|
expect(mockScope.date.year).toEqual(1998);
|
|
|
|
expect(mockScope.date.month).toEqual(0); // Months are zero-indexed
|
|
|
|
expect(mockScope.date.day).toEqual(6);
|
|
|
|
expect(mockScope.time.hours).toEqual(12);
|
|
|
|
expect(mockScope.time.minutes).toEqual(34);
|
|
|
|
expect(mockScope.time.seconds).toEqual(56);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("provides names for time properties", function () {
|
|
|
|
Object.keys(mockScope.time).forEach(function (key) {
|
|
|
|
expect(mockScope.nameFor(key))
|
|
|
|
.toEqual(jasmine.any(String));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("provides options for time properties", function () {
|
|
|
|
Object.keys(mockScope.time).forEach(function (key) {
|
|
|
|
expect(mockScope.optionsFor(key))
|
|
|
|
.toEqual(jasmine.any(Array));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("exposes times to populate calendar as a table", function () {
|
2016-01-06 21:00:16 +00:00
|
|
|
// Verify that data structure is as expected by template
|
|
|
|
expect(mockScope.table).toEqual(jasmine.any(Array));
|
|
|
|
expect(mockScope.table[0]).toEqual(jasmine.any(Array));
|
|
|
|
expect(mockScope.table[0][0]).toEqual({
|
|
|
|
year: jasmine.any(Number),
|
|
|
|
month: jasmine.any(Number),
|
|
|
|
day: jasmine.any(Number),
|
|
|
|
dayOfYear: jasmine.any(Number)
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("contains the current date in its initial table", function () {
|
2015-12-29 23:26:18 +00:00
|
|
|
var matchingCell;
|
|
|
|
// Should be able to find the selected date
|
|
|
|
mockScope.table.forEach(function (row) {
|
|
|
|
row.forEach(function (cell) {
|
|
|
|
if (cell.dayOfYear === 6) {
|
|
|
|
matchingCell = cell;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
expect(matchingCell).toEqual({
|
|
|
|
year: 1998,
|
|
|
|
month: 0,
|
|
|
|
day: 6,
|
|
|
|
dayOfYear: 6
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("allows the displayed month to be advanced", function () {
|
|
|
|
// Around the edges of the displayed calendar we
|
|
|
|
// may be in previous or subsequent month, so
|
|
|
|
// test around the middle.
|
|
|
|
var i, originalMonth = mockScope.table[2][0].month;
|
|
|
|
|
|
|
|
function mod12(month) {
|
|
|
|
return ((month % 12) + 12) % 12;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 1; i <= 12; i += 1) {
|
|
|
|
mockScope.changeMonth(1);
|
|
|
|
expect(mockScope.table[2][0].month)
|
|
|
|
.toEqual(mod12(originalMonth + i));
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 11; i >= -12; i -= 1) {
|
|
|
|
mockScope.changeMonth(-1);
|
|
|
|
expect(mockScope.table[2][0].month)
|
|
|
|
.toEqual(mod12(originalMonth + i));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it("allows checking if a cell is in the current month", function () {
|
|
|
|
expect(mockScope.isInCurrentMonth(mockScope.table[2][0]))
|
|
|
|
.toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("allows cells to be selected", function () {
|
|
|
|
mockScope.select(mockScope.table[2][0]);
|
|
|
|
expect(mockScope.isSelected(mockScope.table[2][0]))
|
|
|
|
.toBe(true);
|
|
|
|
mockScope.select(mockScope.table[2][1]);
|
|
|
|
expect(mockScope.isSelected(mockScope.table[2][0]))
|
|
|
|
.toBe(false);
|
|
|
|
expect(mockScope.isSelected(mockScope.table[2][1]))
|
|
|
|
.toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("allows cells to be compared", function () {
|
|
|
|
var table = mockScope.table;
|
|
|
|
expect(mockScope.dateEquals(table[2][0], table[2][1]))
|
|
|
|
.toBe(false);
|
|
|
|
expect(mockScope.dateEquals(table[2][1], table[2][1]))
|
|
|
|
.toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2015-09-16 23:51:28 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|