tui-grid
Version:
TOAST UI Grid : Powerful data grid control supported by TOAST UI
1,341 lines (1,269 loc) • 84.5 kB
JavaScript
'use strict';
var $ = require('jquery');
var ColumnModelData = require('model/data/columnModel');
var RowListData = require('model/data/rowList');
describe('data.rowList', function() {
var columns = [
{
title: 'keyColumn',
name: 'keyColumn'
},
{
title: '_button',
name: '_button'
},
{
title: '_number',
name: '_number'
},
{
title: 'none',
name: 'none'
},
{
title: 'hasFormatter',
name: 'hasFormatter',
formatter: function(value) {
return '<a href="http://www.testurl.com" >' + value + '</a> click<button> me</button>';
}
},
{
title: 'useHtmlEntity',
name: 'useHtmlEntity',
useHtmlEntity: false
},
{
title: 'relations',
name: 'relations',
relations: [
{
targetNames: ['select', 'checkbox', 'radio'],
listItems: function(value) {
if (value === true) {
return [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
];
}
return false;
}
},
{
targetNames: ['text'],
disabled: function(value) {
// false 면 true 를 반환
return value === false;
},
editable: function(value) {
// false 면 false 를 반환
return value !== false;
}
}
]
},
{
title: 'text',
name: 'text',
editOptions: {
type: 'text'
}
},
{
title: 'text-convertible',
name: 'text-convertible',
editOptions: {
type: 'text-convertible'
}
},
{
title: 'select',
name: 'select',
editOptions: {
type: 'select',
listItems: [
{
text: 'text1',
value: 1
},
{
text: 'text2',
value: 2
},
{
text: 'text3',
value: 3
},
{
text: 'text4',
value: 4
}
]
}
},
{
title: 'checkbox',
name: 'checkbox',
editOptions: {
type: 'checkbox',
listItems: [
{
text: 'text1',
value: 1
},
{
text: 'text2',
value: 2
},
{
text: 'text3',
value: 3
},
{
text: 'text4',
value: 4
}
]
}
},
{
title: 'radio',
name: 'radio',
editOptions: {
type: 'radio',
listItems: [
{
text: 'text1',
value: 1
},
{
text: 'text2',
value: 2
},
{
text: 'text3',
value: 3
},
{
text: 'text4',
value: 4
}
]
}
},
{
title: 'radioNoRelation',
name: 'radioNoRelation',
editOptions: {
type: 'radio',
listItems: [
{
text: 'text1',
value: 1
},
{
text: 'text2',
value: 2
},
{
text: 'text3',
value: 3
},
{
text: 'text4',
value: 4
}
]
}
},
{
title: 'hidden',
name: 'hidden',
hidden: true
}
];
var originalData = [
{
'_extraData': {
rowState: 'CHECKED'
},
'_number': false,
'_button': false,
'keyColumn': 10,
'none': 0,
'text': 0,
'text-convertible': 0,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_extraData': {
rowSpan: {
'none': 2,
'text': 3
}
},
'_number': false,
'_button': false,
'keyColumn': 11,
'none': 1,
'text': 1,
'text-convertible': 1,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'keyColumn': 12,
'none': 2,
'text': 2,
'text-convertible': 2,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_number': false,
'_button': false,
'keyColumn': 13,
'none': 3,
'text': 3,
'text-convertible': 3,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_number': true,
'_button': true,
'keyColumn': 14,
'none': 4,
'text': 4,
'text-convertible': 4,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_number': false,
'_button': false,
'keyColumn': 15,
'none': 5,
'text': 5,
'text-convertible': 5,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_number': false,
'_button': false,
'keyColumn': 16,
'none': 6,
'text': 6,
'text-convertible': 6,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_number': false,
'_button': false,
'keyColumn': 17,
'none': 7,
'text': 7,
'text-convertible': 7,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_extraData': {
rowState: 'DISABLED'
},
'_number': false,
'_button': false,
'keyColumn': 18,
'none': 8,
'text': 8,
'text-convertible': 8,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
},
{
'_extraData': {
rowState: 'DISABLED_CHECK'
},
'_number': false,
'_button': false,
'keyColumn': 19,
'none': 9,
'text': 9,
'text-convertible': 9,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
}
];
var rowList, dataModelInstance, columnModelInstance;
beforeEach(function() {
rowList = $.extend(true, [], originalData);
columnModelInstance = new ColumnModelData();
columnModelInstance.set('columns', columns);
dataModelInstance = new RowListData([], {
columnModel: columnModelInstance
});
});
describe('Model 테스트', function() {
describe('_getStringOfListItems()', function() {
it('List Type 의 경우 columnModel 의 editOptionList 에 정의된 Value를 반환한다.', function() {
var sampleList = [{
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'none': 1
}],
row;
dataModelInstance.set(sampleList, {parse: true});
row = dataModelInstance.at(0);
expect(row._getStringOfListItems('select')).toBe('1');
expect(row._getStringOfListItems('radio')).toBe('2');
expect(row._getStringOfListItems('checkbox')).toBe('1,2,3');
expect(row._getStringOfListItems('none')).toBe('');
});
it('changeOptionList Relation 이 걸려있을 경우에도 정상 동작하는지 확인한다.', function() {
var sampleList = [{
'relations': true,
'select': 1,
'radio': 2,
'radioNoRelation': 2,
'checkbox': '1,2,3',
'none': 1
}],
row;
dataModelInstance.set(sampleList, {parse: true});
row = dataModelInstance.at(0);
expect(row._getStringOfListItems('select')).toBe('1');
expect(row._getStringOfListItems('radio')).toBe('2');
expect(row._getStringOfListItems('checkbox')).toBe('1,2,3');
expect(row._getStringOfListItems('radioNoRelation')).toBe('2');
});
it('when second paramter is set, the method returns concatenated text of list items.', function() {
var sampleList = [{
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'none': 1
}];
var row;
dataModelInstance.set(sampleList, {parse: true});
row = dataModelInstance.at(0);
expect(row._getStringOfListItems('select', true)).toBe('text1');
expect(row._getStringOfListItems('radio', true)).toBe('text2');
expect(row._getStringOfListItems('checkbox', true)).toBe('text1,text2,text3');
expect(row._getStringOfListItems('none', true)).toBe('');
});
});
describe('getValueString()', function() {
it('copy & paste 기능을 사용할 때 정상적으로 텍스트를 반환한다.', function() {
var sampleList = [{
'none': 'nope',
'hasFormatter': '<script>alert("test");</script>',
'useHtmlEntity': '<html></html>',
'relations': false,
'text': 'text',
'text-convertible': 'convertible-text',
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'radioNoRelation': 2,
'hidden': 1
}, {
'none': 'nope',
'hasFormatter': '<script>alert("test");</script>',
'useHtmlEntity': '<html></html>',
'relations': true,
'text': 'text',
'text-convertible': 'convertible-text',
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'radioNoRelation': 2,
'hidden': 1
}],
row;
dataModelInstance.set(sampleList, {parse: true});
row = dataModelInstance.at(0);
expect(row.getValueString('none')).toBe('nope');
expect(row.getValueString('hasFormatter')).toBe('<script>alert("test");</script>');
expect(row.getValueString('useHtmlEntity')).toBe('<html></html>');
expect(row.getValueString('relations')).toBe('false');
expect(row.getValueString('text')).toBe('text');
expect(row.getValueString('text-convertible')).toBe('convertible-text');
expect(row.getValueString('select')).toBe('1');
expect(row.getValueString('radio')).toBe('2');
expect(row.getValueString('checkbox')).toBe('1,2,3');
expect(row.getValueString('radioNoRelation')).toBe('2');
expect(row.getValueString('hidden')).toBe('1');
row = dataModelInstance.at(1);
expect(row.getValueString('none')).toBe('nope');
expect(row.getValueString('hasFormatter')).toBe('<script>alert("test");</script>');
expect(row.getValueString('useHtmlEntity')).toBe('<html></html>');
expect(row.getValueString('relations')).toBe('true');
expect(row.getValueString('text')).toBe('text');
expect(row.getValueString('text-convertible')).toBe('convertible-text');
expect(row.getValueString('select')).toBe('1');
expect(row.getValueString('radio')).toBe('2');
expect(row.getValueString('checkbox')).toBe('1,2,3');
expect(row.getValueString('radioNoRelation')).toBe('2');
expect(row.getValueString('hidden')).toBe('1');
});
});
describe('getClassNameList()', function() {
it('extraData 에 정의된 className 을 반환한다.', function() {
var sampleList = [
{
'_extraData': {
'className': {
'row': ['rowClass0', 'rowClass1']
}
},
'relations': false,
'text': 'sample1'
},
{
'_extraData': {
'className': {
'column': {
'text': ['textClass1', 'textClass2'],
'relations': ['relationClass1']
}
}
},
'relations': false,
'text': 'sample1'
}, {
'_extraData': {
'className': {
'row': ['rowClass0'],
'column': {
'text': ['textClass1', 'textClass2'],
'relations': ['relationClass1']
}
}
},
'relations': false,
'text': 'sample1'
}, {
'relations': false,
'text': 'sample1'
}
];
var row0, row1, row2, row3;
columnModelInstance.set({
'hasNumberColumn': true,
'selectType': 'checkbox'
});
dataModelInstance.set(sampleList, {parse: true});
row0 = dataModelInstance.get(0);
row1 = dataModelInstance.get(1);
row2 = dataModelInstance.get(2);
row3 = dataModelInstance.get(3);
expect(row0.getClassNameList('relations').length).toEqual(2);
expect(row0.getClassNameList('relations')).toContain('rowClass0');
expect(row0.getClassNameList('relations')).toContain('rowClass1');
expect(row0.getClassNameList('text').length).toEqual(3);
expect(row0.getClassNameList('text')).toContain('rowClass0');
expect(row0.getClassNameList('text')).toContain('rowClass1');
expect(row1.getClassNameList('relations').length).toEqual(1);
expect(row1.getClassNameList('relations')).toContain('relationClass1');
expect(row1.getClassNameList('text').length).toEqual(3);
expect(row1.getClassNameList('text')).toContain('textClass1');
expect(row1.getClassNameList('text')).toContain('textClass2');
expect(row2.getClassNameList('relations').length).toEqual(2);
expect(row2.getClassNameList('relations')).toContain('rowClass0');
expect(row2.getClassNameList('relations')).toContain('relationClass1');
expect(row2.getClassNameList('text').length).toEqual(4);
expect(row2.getClassNameList('text')).toContain('rowClass0');
expect(row2.getClassNameList('text')).toContain('textClass1');
expect(row2.getClassNameList('text')).toContain('textClass2');
expect(row3.getClassNameList('relations').length).toEqual(0);
expect(row3.getClassNameList('text').length).toEqual(1);
});
});
describe('getCellState() relation list 결과와 rowState 를 종합한 결과를 통해 disabled, editable 을 반환한다.', function() {
var sampleList;
beforeEach(function() {
sampleList = [{
'relations': false,
'text': 'sample1'
}, {
'relations': true,
'text': 'sample2'
}];
columnModelInstance.set({
'hasNumberColumn': true,
'selectType': 'checkbox'
});
dataModelInstance.set(sampleList, {parse: true});
});
it('결과값에 맞게 반환하는지 확인한다.', function() {
expect(dataModelInstance.at(0).getCellState('_button')).toEqual({
disabled: false,
editable: true
});
expect(dataModelInstance.at(0).getCellState('_number')).toEqual({
disabled: false,
editable: false
});
expect(dataModelInstance.at(0).getCellState('text')).toEqual({
disabled: true,
editable: false
});
expect(dataModelInstance.at(1).getCellState('text')).toEqual({
disabled: false,
editable: true
});
});
it('rowState 값이 DISABLED 일 경우 결과를 확인한다.', function() {
sampleList = [{
'_extraData': {
'rowState': 'DISABLED'
},
'relations': false,
'text': 'sample1'
}, {
'relations': true,
'text': 'sample2'
}];
dataModelInstance.set(sampleList, {parse: true});
expect(dataModelInstance.at(0).getCellState('_button')).toEqual({
disabled: true,
editable: true
});
expect(dataModelInstance.at(0).getCellState('_number')).toEqual({
disabled: true,
editable: false
});
expect(dataModelInstance.at(0).getCellState('text')).toEqual({
disabled: true,
editable: false
});
});
it('rowState 값이 DISABLED_CHECK 일 경우 결과를 확인한다.', function() {
sampleList = [{
'_extraData': {
'rowState': 'DISABLED_CHECK'
},
'relations': false,
'text': 'sample1'
}, {
'relations': true,
'text': 'sample2'
}];
dataModelInstance.set(sampleList, {parse: true});
expect(dataModelInstance.at(0).getCellState('_button')).toEqual({
disabled: true,
editable: true
});
expect(dataModelInstance.at(0).getCellState('_number')).toEqual({
disabled: false,
editable: false
});
expect(dataModelInstance.at(0).getCellState('text')).toEqual({
disabled: true,
editable: false
});
});
});
describe('disabled() cellState 를 사용하는 메서드이므로 파라미터에 대해 동작하는지 간단하게 확인한다..', function() {
it('columnName 을 전달했을경우 정상적으로 disabled 값을 반환한다..', function() {
var sampleList = [{
'_extraData': {
'rowState': 'DISABLED'
},
'relations': false,
'text': 'sample1'
}, {
'relations': true,
'text': 'sample2'
}];
dataModelInstance.set(sampleList, {parse: true});
expect(dataModelInstance.at(0).isDisabled('_button')).toEqual(true);
expect(dataModelInstance.at(0).isDisabled('_number')).toEqual(true);
expect(dataModelInstance.at(0).isDisabled('relations')).toEqual(true);
expect(dataModelInstance.at(0).isDisabled('text')).toEqual(true);
expect(dataModelInstance.at(1).isDisabled('_button')).toEqual(false);
expect(dataModelInstance.at(1).isDisabled('_number')).toEqual(false);
expect(dataModelInstance.at(1).isDisabled('relations')).toEqual(false);
expect(dataModelInstance.at(1).isDisabled('text')).toEqual(false);
});
});
describe('editable() cellState 를 사용하는 메서드이므로, cellState 를 이용하지 않을때 정상 동작하는지 확인한다.', function() {
it('_number, normal type 의 경우 false 를 리턴하는지 확인한다.', function() {
var sampleList = [{
'relations': false,
'text': 'sample1'
}, {
'relations': true,
'text': 'sample2'
}];
columnModelInstance.set({
'hasNumberColumn': true,
'selectType': 'checkbox'
});
dataModelInstance.set(sampleList, {parse: true});
expect(dataModelInstance.get(0).isEditable('_number')).toEqual(false);
expect(dataModelInstance.get(0).isEditable('normal')).toEqual(false);
});
});
describe('getRelationResult()', function() {
var sampleList, row;
beforeEach(function() {
sampleList = [{
'relations': false,
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'radioNoRelation': 2
}, {
'relations': true,
'select': 1,
'radio': 2,
'checkbox': '1,2,3',
'radioNoRelation': 2
}];
dataModelInstance.set(sampleList, {parse: true});
});
it('relation 수행 결과를 정확하게 반환한다.', function() {
row = dataModelInstance.at(0);
expect(row.executeRelationCallbacksAll()).toEqual({
select: {
listItems: false
},
checkbox: {
listItems: false
},
radio: {
listItems: false
},
text: {
disabled: true,
editable: false
}
});
row = dataModelInstance.at(1);
expect(row.executeRelationCallbacksAll()).toEqual({
select: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
checkbox: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
radio: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
text: {
disabled: false,
editable: true
}
});
});
it('원하는 callbackNameList에 맞게 relationResult 를 반환한다.', function() {
row = dataModelInstance.at(1);
expect(row.executeRelationCallbacksAll(['listItems'])).toEqual({
select: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
checkbox: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
radio: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
}
});
expect(row.executeRelationCallbacksAll(['listItems', 'editable'])).toEqual({
select: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
checkbox: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
radio: {
listItems: [
{
text: '하나',
value: 1
},
{
text: '둘',
value: 2
},
{
text: '셋',
value: 3
},
{
text: '넷',
value: 4
}
]
},
text: {
editable: true
}
});
expect(row.executeRelationCallbacksAll(['editable'])).toEqual({
text: {editable: true}
});
expect(row.executeRelationCallbacksAll(['editable', 'disabled'])).toEqual({
text: {
disabled: false,
editable: true
}
});
});
});
});
describe('Collection 테스트', function() {
describe('rowList set 시 parse 관련 로직을 테스트한다.', function() {
describe('_baseFormat()', function() {
describe('keyColumnName 이 존재하지 않을 때', function() {
it('extraData 가 없을때', function() {
var baseRow = dataModelInstance._baseFormat({
'none': 4,
'text': 4,
'text-convertible': 4,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
}, 0),
expectResult = {
'rowKey': 0,
'_button': false,
'_extraData': {
rowSpan: null,
rowState: null,
rowSpanData: null
},
'none': 4,
'text': 4,
'text-convertible': 4,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
};
expect(baseRow).toEqual(expectResult);
});
it('rowState가 CHECKED 일 때', function() {
var baseRow = dataModelInstance._baseFormat({
'_extraData': {
rowState: 'CHECKED'
},
'none': 0,
'text': 0,
'text-convertible': 0,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
}, 0),
expectResult = {
'rowKey': 0,
'_button': true,
'_extraData': {
rowSpan: null,
rowSpanData: null,
rowState: 'CHECKED'
},
'none': 0,
'text': 0,
'text-convertible': 0,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
};
expect(baseRow).toEqual(expectResult);
});
it('rowSpan 이 존재할 때', function() {
var baseRow = dataModelInstance._baseFormat({
'_extraData': {
rowSpan: {
'none': 2,
'text': 3,
'text-convertible': 4,
'select': 5,
'checkbox': 6,
'radio': 7
}
},
'none': 1,
'text': 1,
'text-convertible': 1,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
}, 0),
expectResult = {
'rowKey': 0,
'_button': false,
'_extraData': {
rowSpan: {
'none': 2,
'text': 3,
'text-convertible': 4,
'select': 5,
'checkbox': 6,
'radio': 7
},
rowState: null,
rowSpanData: null
},
'none': 1,
'text': 1,
'text-convertible': 1,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
};
expect(baseRow).toEqual(expectResult);
});
});
describe('keyColumnName이 설정되어 있다면', function() {
it('keyColumnName이 설정되어 있다면 rowKey는 keyColumn에 해당하는 값으로 설정된다.', function() {
var baseRow;
columnModelInstance.set('keyColumnName', 'none');
baseRow = dataModelInstance._baseFormat({
'none': 4,
'text': 4,
'text-convertible': 4,
'select': 1,
'checkbox': 1,
'radio': 1,
'hidden': 1
}, 0);
expect(baseRow.rowKey).toEqual(4);
});
});
});
describe('_setExtraRowSpanData()', function() {
it('자신과 자식 row 까지 rowSpanData를 잘 설정하는지 확인한다.', function() {
// _baseFormat 을 타고 온다고 가정하기 때문에 셈플 데이터에 rowKey 를 할당한다
var testList = [
{
'_extraData': {
'rowSpan': {
'none': 2,
'text': 3
}
},
rowKey: 0
}, {
rowKey: 1
}, {
rowKey: 2
}, {
rowKey: 3
}
];
var formattedList = dataModelInstance._setExtraRowSpanData(testList, 0);
expect(formattedList[0]._extraData.rowSpanData).toEqual({
'none': {
count: 2,
isMainRow: true,
mainRowKey: 0
},
'text': {
count: 3,
isMainRow: true,
mainRowKey: 0
}
});
expect(formattedList[1]._extraData.rowSpanData).toEqual({
'none': {
count: -1,
isMainRow: false,
mainRowKey: 0
},
'text': {
count: -1,
isMainRow: false,
mainRowKey: 0
}
});
expect(formattedList[2]._extraData.rowSpanData).toEqual({
'text': {
count: -2,
isMainRow: false,
mainRowKey: 0
}
});
expect(formattedList[3]._extraData).not.toBeDefined();
});
});
describe('_formatData()', function() {
it('_paseFormat, _setExtraRowSpanData 를 정상적으로 잘 수행하는지 확인한다.', function() {
var testList = [
{
'_extraData': {
'rowSpan': {
'none': 2,
'text': 3
}
},
'none': 0,
'text': 0
}, {
'none': 1,
'text': 1
}, {
'none': 2,
'text': 2
}, {
'none': 3,
'text': 3
}
];
var formattedList = dataModelInstance._formatData(testList, 0);
expect(formattedList[0]).toEqual({
'_extraData': {
'rowSpan': {
'none': 2,
'text': 3
},
'rowState': null,
'rowSpanData': {
'none': {
count: 2,
isMainRow: true,
mainRowKey: 0
},
'text': {
count: 3,
isMainRow: true,
mainRowKey: 0
}
}
},
'none': 0,
'text': 0,
'rowKey': 0,
'_button': false
});
expect(formattedList[1]).toEqual({
'_extraData': {
'rowSpan': null,
'rowState': null,
'rowSpanData': {
'none': {
count: -1,
isMainRow: false,
mainRowKey: 0
},
'text': {
count: -1,
isMainRow: false,
mainRowKey: 0
}
}
},
'none': 0,
'text': 0,
'rowKey': 1,
'_button': false
});
expect(formattedList[2]).toEqual({
'_extraData': {
'rowSpan': null,
'rowState': null,
'rowSpanData': {
'text': {
count: -2,
isMainRow: false,
mainRowKey: 0
}
}
},
'none': 2,
'text': 0,
'rowKey': 2,
'_button': false
});
expect(formattedList[3]).toEqual({
'_extraData': {
'rowSpan': null,
'rowState': null,
'rowSpanData': null
},
'none': 3,
'text': 3,
'rowKey': 3,
'_button': false
});
});
});
});
describe('original Data 시리즈', function() {
beforeEach(function() {
dataModelInstance.set(rowList, {
parse: true
});
dataModelInstance.setOriginalRowList();
});
describe('getOriginalRowList()', function() {
it('set 에서 parse 후 originalRows 가 정상적으로 생성되었는지 확인한다.', function() {
var expectResult;
dataModelInstance.lastRowKey = -1;
expectResult = dataModelInstance._formatData(originalData);
expect(dataModelInstance.toJSON()).toEqual(expectResult);
// 데이터 변경
dataModelInstance.get(0).set('none', '2222');
expect(dataModelInstance.toJSON()).not.toEqual(expectResult);
expect(dataModelInstance.getOriginalRowList()).toEqual(expectResult);
});
});
describe('getOriginalRow()', function() {
it('set 에서 parse 후 originalRows 가 정상적으로 생성되었는지 확인한다.', function() {
var expectResultList;
dataModelInstance.lastRowKey = -1;
expectResultList = dataModelInstance._formatData(originalData);
expect(dataModelInstance.get(0).toJSON()).toEqual(expectResultList[0]);
dataModelInstance.at(0).set('none', '2222');
expect(dataModelInstance.get(0).toJSON()).not.toEqual(expectResultList[0]);
expect(dataModelInstance.getOriginalRow(0)).toEqual(expectResultList[0]);
});
});
describe('getOriginal()', function() {
it('set 에서 parse 후 originalRows 가 정상적으로 생성되었는지 확인한다.', function() {
var expectResultList = dataModelInstance._formatData(originalData);
expect(dataModelInstance.get(0).get('none')).toBe(expectResultList[0].none);
// 데이터 변경
dataModelInstance.at(0).set('none', '2222');
expect(dataModelInstance.get(0).get('none')).not.toBe(expectResultList[0].none);
expect(dataModelInstance.getOriginal(0, 'none')).toBe(expectResultList[0].none);
});
});
});
describe('indexOfRowKey()', function() {
it('rowKey 를 인자로 index 를 알 수 있다.', function() {
columnModelInstance.set('keyColumnName', 'keyColumn');
dataModelInstance.set(rowList, {
parse: true
});
expect(dataModelInstance.indexOfRowKey(10)).toBe(0);
expect(dataModelInstance.indexOfRowKey(11)).toBe(1);
expect(dataModelInstance.indexOfRowKey(12)).toBe(2);
expect(dataModelInstance.indexOfRowKey(1)).toBe(-1);
});
});
describe('getRows', function() {
it('withRawData 옵션값이 설정되어 있으면 내부용 데이터를 제거하지 않고 반환한다.', function() {
var myRowList;
columnModelInstance.set({
hasNumberColumn: true,
selectType: 'checkbox'
});
dataModelInstance.set(rowList, {
parse: true
});
myRowList = dataModelInstance.getRows();
expect(myRowList[0]._button).not.toBeDefined();
expect(myRowList[0]._extraData).not.toBeDefined();
expect(myRowList[0]._number).not.toBeDefined();
myRowList = dataModelInstance.getRows(false, true);
expect(myRowList[0]._button).toBeDefined();
expect(myRowList[0]._extraData).toBeDefined();
expect(myRowList[0]._number).toBeDefined();
});
it('isChecked 옵션값이 설정되어 있으면 checked 된 리스트만 반환한다.', function() {
var myRowList;
columnModelInstance.set({
hasNumberColumn: true,
selectType: 'checkbox'
});
dataModelInstance.set(rowList, {
parse: true
});
dataModelInstance.at(0).set('_button', true);
dataModelInstance.at(2).set('_button', true);
dataModelInstance.at(3).set('_button', true);
myRowList = dataModelInstance.getRows(true);
expect(myRowList.length).toBe(3);
expect(myRowList[1].keyColumn).toBe(12);
expect(myRowList[1]._extraData).not.toBeDefined();
myRowList = dataModelInstance.getRows(true, true);
expect(myRowList[1]._extraData).toBeDefined();
});
});
describe('isSortedByField()', function() {
it('현재 sorting 상태인지 확인할 수 있다.', function() {
dataModelInstance.set(rowList, {
parse: true
});
expect(dataModelInstance.isSortedByField()).toBe(false);