tui-grid
Version:
TOAST UI Grid : Powerful data grid control supported by TOAST UI
185 lines (155 loc) • 6.65 kB
JavaScript
;
var Backbone = require('backbone');
var $ = require('jquery');
var _ = require('underscore');
var DatePicker = require('tui-date-picker');
var DatePickerLayer = require('view/datePickerLayer');
var classNameConst = require('common/classNameConst');
var ColumnModel = require('model/data/columnModel');
function createDatePickerLayer(columnModelData) {
return new DatePickerLayer({
textPainter: _.assign({
blockFocusingOut: function() {},
unblockFocusingOut: function() {}
}, Backbone.Events),
domState: {
getOffset: _.constant({
top: 0,
left: 0
})
},
columnModel: new ColumnModel(columnModelData)
});
}
function createColumnModelStub(editType, compName, compOption) {
return {
getColumnModel: _.constant({
component: {
name: compName,
options: compOption
}
}),
getEditType: _.constant(editType)
};
}
function createFocusModelStub(rowKey, columnName) {
return {
which: _.constant({
rowKey: rowKey,
columnName: columnName
})
};
}
describe('[DatePickerLayer] ', function() {
var layer;
var columnModelData;
beforeEach(function() {
columnModelData = {
columns: [
{
name: 'c1',
component: {
name: 'datePicker'
}
}
]
};
layer = createDatePickerLayer(columnModelData);
layer.render();
});
it('element has a LAYER_DATE_PICKER class name', function() {
expect(layer.$el).toHaveClass(classNameConst.LAYER_DATE_PICKER);
});
it('creates datepickers instance when initializing', function() {
expect(layer.datePickerMap.c1).toEqual(jasmine.any(DatePicker));
});
describe('when \'focusIn\' event occur on the text-painter ', function() {
describe('and editType is \'text\' and component name is \'datePicker\', ', function() {
it('set component options to datePicker instance', function() {
var datePicker = layer.datePickerMap.c1;
var setInputSpy = spyOn(datePicker, 'setInput');
var setRangesSpy = spyOn(datePicker, 'setRanges');
var setDateSpy = spyOn(datePicker, 'setDate');
var options = {
date: new Date(2015, 10, 20),
format: 'yyyy-MM-dd',
selectableRanges: [[
new Date(2015, 10, 27),
new Date(2016, 1, 15)
]]
};
var $input = $('<input>');
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('text', 'datePicker', options);
layer.textPainter.trigger('focusIn', $input, {
columnName: 'c1'
});
expect(setInputSpy).toHaveBeenCalledWith(
$input,
{
format: options.format,
syncFromInput: true
}
);
expect(setRangesSpy).toHaveBeenCalledWith(options.selectableRanges);
expect(setDateSpy).toHaveBeenCalledWith(options.date);
});
it('set date with current time if option.date is not specified', function() {
var setDateSpy = spyOn(layer.datePickerMap.c1, 'setDate');
var today = new Date();
jasmine.clock().install();
jasmine.clock().mockDate(today);
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('text', 'datePicker');
layer.textPainter.trigger('focusIn', $('<input>'), {
columnName: 'c1'
});
expect(setDateSpy.calls.argsFor(0)[0].getTime()).toBe(today.getTime());
jasmine.clock().uninstall();
});
it('change input element and set date as value of element', function() {
var setElementSpy = spyOn(layer.datePickerMap.c1, 'setInput');
var $input = $('<input>');
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('text', 'datePicker');
layer.textPainter.trigger('focusIn', $input, {
columnName: 'c1'
});
expect(setElementSpy).toHaveBeenCalledWith($input, {
format: 'yyyy-MM-dd',
syncFromInput: true
});
});
it('datePicker should be opened and visible', function() {
var spyOpen = spyOn(layer.datePickerMap.c1, 'open').and.callThrough();
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('text', 'datePicker');
layer.textPainter.trigger('focusIn', $('<input>'), {
columnName: 'c1'
});
expect(layer.$el.css('display')).toBe('block');
expect(spyOpen).toHaveBeenCalled();
});
});
describe('and editType is not \'text\'', function() {
it('datePicker should not be opened and the layer should be hidden', function() {
var spyOpen = spyOn(layer.datePickerMap.c1, 'open');
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('select', 'datePicker');
layer.textPainter.trigger('focusIn', $('<input>'), {});
expect(layer.$el).toBeHidden();
expect(spyOpen).not.toHaveBeenCalled();
});
});
describe('and component name is not \'datePicker\'', function() {
it('datePicker should not be opened and the layer should be hidden', function() {
var spyOpen = spyOn(layer.datePickerMap.c1, 'open');
layer.focusModel = createFocusModelStub(0, 'c1');
layer.columnModel = createColumnModelStub('text', 'autocomplete');
layer.textPainter.trigger('focusIn', $('<input>'), {});
expect(layer.$el).toBeHidden();
expect(spyOpen).not.toHaveBeenCalled();
});
});
});
});