| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- describe('Core_dataSchema', () => {
- var id = 'testContainer';
- beforeEach(function() {
- this.$container = $(`<div id="${id}"></div>`).appendTo('body');
- });
- afterEach(function() {
- if (this.$container) {
- destroy();
- this.$container.remove();
- }
- });
- it('should be equal to `hot.getSchema()` when dataSchema is defined in settings (as object)', () => {
- var schema = {id: null, name: {first: null, last: null}, cars: [{brand: null}]},
- hot = handsontable({
- data: [],
- dataSchema: schema,
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns: [
- {data: 'id'},
- {data: 'name.first'},
- {data: 'name.last'}
- ],
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema())).toEqual(JSON.stringify(schema));
- });
- it('should be equal to `hot.getSchema()` when dataSchema is defined in settings (as object) when columns is a function', () => {
- var schema = {id: null, name: {first: null, last: null}, cars: [{brand: null}]},
- hot = handsontable({
- data: [],
- dataSchema: schema,
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = 'id';
- } else if (column === 1) {
- colMeta.data = 'name.first';
- } else if (column === 2) {
- colMeta.data = 'name.last';
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema())).toEqual(JSON.stringify(schema));
- });
- it('should be equal to `hot.getSchema()` when dataSchema is defined in settings (as function)', () => {
- var schema = {id: null, name: {first: null, last: null}, cars: [{brand: null}]},
- hot = handsontable({
- data: [],
- dataSchema() {
- return schema;
- },
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns: [
- {data: 'id'},
- {data: 'name.first'},
- {data: 'name.last'}
- ],
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema())).toEqual(JSON.stringify(schema));
- });
- it('should be equal to `hot.getSchema()` when dataSchema is defined in settings (as function) when columns is a function', () => {
- var schema = {id: null, name: {first: null, last: null}, cars: [{brand: null}]},
- hot = handsontable({
- data: [],
- dataSchema() {
- return schema;
- },
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = 'id';
- } else if (column === 1) {
- colMeta.data = 'name.first';
- } else if (column === 2) {
- colMeta.data = 'name.last';
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema())).toEqual(JSON.stringify(schema));
- });
- it('should be equal to `hot.getSchema()` when dataSchema is generated based on data structure', () => {
- var hot = handsontable({
- data: [
- {id: 1, name: {first: 'Alan', last: 'Pakoli'}, cars: [{brand: 'Ford'}]}
- ],
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns: [
- {data: 'id'},
- {data: 'name.first'},
- {data: 'name.last'}
- ],
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema()))
- .toEqual(JSON.stringify({id: null, name: {first: null, last: null}, cars: [{brand: null}]}));
- });
- it('should be equal to `hot.getSchema()` when dataSchema is generated based on data structure when columns is a function', () => {
- var hot = handsontable({
- data: [
- {id: 1, name: {first: 'Alan', last: 'Pakoli'}, cars: [{brand: 'Ford'}]}
- ],
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name'],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = 'id';
- } else if (column === 1) {
- colMeta.data = 'name.first';
- } else if (column === 2) {
- colMeta.data = 'name.last';
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- minSpareRows: 1
- });
- expect(JSON.stringify(hot.getSchema()))
- .toEqual(JSON.stringify({id: null, name: {first: null, last: null}, cars: [{brand: null}]}));
- });
- it('should create new row from dataSchema', () => {
- handsontable({
- data: [],
- dataSchema: {id: null, name: {first: null, last: null}, address: null},
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],
- columns: [
- {data: 'id'},
- {data: 'name.first'},
- {data: 'name.last'},
- {data: 'address'}
- ],
- minSpareRows: 1
- });
- selectCell(0, 1);
- keyDownUp('enter');
- keyProxy().val('Ted');
- keyDownUp('enter');
- expect(getData()[0][1]).toEqual('Ted');
- expect(getSourceData()[0].name.first).toEqual('Ted');
- });
- it('should create new row from dataSchema when columns is a function', () => {
- handsontable({
- data: [],
- dataSchema: {id: null, name: {first: null, last: null}, address: null},
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = 'id';
- } else if (column === 1) {
- colMeta.data = 'name.first';
- } else if (column === 2) {
- colMeta.data = 'name.last';
- } else if (column === 3) {
- colMeta.data = 'address';
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- minSpareRows: 1
- });
- selectCell(0, 1);
- keyDownUp('enter');
- keyProxy().val('Ted');
- keyDownUp('enter');
- expect(getData()[0][1]).toEqual('Ted');
- expect(getSourceData()[0].name.first).toEqual('Ted');
- });
- it('should create new row from dataSchema (functional)', () => {
- handsontable({
- data: [],
- dataSchema(index) {
- return {id: 1000 + index, name: {first: null, last: null}, address: null};
- },
- isEmptyRow(r) {
- var row = this.getSourceData()[r];
- return (row.name.first === null || row.name.first === '') &&
- (row.name.last === null || row.name.last === '') &&
- (row.address === null || row.address === '');
- },
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],
- columns: [
- {data: 'id'},
- {data: 'name.first'},
- {data: 'name.last'},
- {data: 'address'}
- ],
- minSpareRows: 1
- });
- selectCell(4, 1);
- expect(countRows()).toEqual(5);
- keyDownUp('enter');
- keyProxy().val('Ted');
- // need it in next frame as long as HT is rendered in async
- keyDownUp('enter');
- // need it in next frame as long as HT is rendered in async
- keyDownUp('enter');
- expect(getSourceData()[4].name.first).toEqual('Ted');
- expect(getSourceData()[4].id).toEqual(1004);
- expect(getData()[4][1]).toEqual('Ted');
- expect(getData()[4][0]).toEqual(1004);
- expect(countRows()).toEqual(6); // row should be added by keepEmptyRows
- });
- it('should create new row from dataSchema (functional) when columns is a function', () => {
- handsontable({
- data: [],
- dataSchema(index) {
- return {id: 1000 + index, name: {first: null, last: null}, address: null};
- },
- isEmptyRow(r) {
- var row = this.getSourceData()[r];
- return (row.name.first === null || row.name.first === '') &&
- (row.name.last === null || row.name.last === '') &&
- (row.address === null || row.address === '');
- },
- minRows: 5,
- minCols: 4,
- colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = 'id';
- } else if (column === 1) {
- colMeta.data = 'name.first';
- } else if (column === 2) {
- colMeta.data = 'name.last';
- } else if (column === 3) {
- colMeta.data = 'address';
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- minSpareRows: 1
- });
- selectCell(4, 1);
- expect(countRows()).toEqual(5);
- keyDownUp('enter');
- keyProxy().val('Ted');
- // need it in next frame as long as HT is rendered in async
- keyDownUp('enter');
- // need it in next frame as long as HT is rendered in async
- keyDownUp('enter');
- expect(getSourceData()[4].name.first).toEqual('Ted');
- expect(getSourceData()[4].id).toEqual(1004);
- expect(getData()[4][1]).toEqual('Ted');
- expect(getData()[4][0]).toEqual(1004);
- expect(countRows()).toEqual(6); // row should be added by keepEmptyRows
- });
- it('should translate prop to col, when prop is a function', () => {
- var idAccessor = createAccessorForProperty('id');
- var nameAccessor = createAccessorForProperty('name');
- hot = handsontable({
- data: [
- Model({
- id: 1,
- name: 'Tom'
- }),
- Model({
- id: 2,
- name: 'Hanna'
- }),
- Model({
- id: 3,
- name: 'Jerry'
- })
- ],
- dataSchema: Model,
- columns: [
- {
- data: idAccessor
- },
- {
- data: nameAccessor
- }
- ]
- });
- expect(hot.propToCol(idAccessor)).toEqual(0);
- expect(hot.propToCol(nameAccessor)).toEqual(1);
- });
- it('should translate prop to col, when prop and columns is a function', () => {
- var idAccessor = createAccessorForProperty('id');
- var nameAccessor = createAccessorForProperty('name');
- hot = handsontable({
- data: [
- Model({
- id: 1,
- name: 'Tom'
- }),
- Model({
- id: 2,
- name: 'Hanna'
- }),
- Model({
- id: 3,
- name: 'Jerry'
- })
- ],
- dataSchema: Model,
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = idAccessor;
- } else if (column === 1) {
- colMeta.data = nameAccessor;
- } else {
- colMeta = null;
- }
- return colMeta;
- }
- });
- expect(hot.propToCol(idAccessor)).toEqual(0);
- expect(hot.propToCol(nameAccessor)).toEqual(1);
- });
- it('should create new row data matched to dataSchema (data type as `array`)', () => {
- var spy = jasmine.createSpy();
- var hot = handsontable({
- data: [[{id: 1}]],
- dataSchema: [{id: null}],
- columns: [
- {data: '0', renderer: spy}
- ],
- autoColumnSize: false,
- autoRowSize: false,
- });
- expect(spy.calls.count()).toBe(1);
- expect(spy.calls.argsFor(0)[5]).toEqual({id: 1});
- spy.calls.reset();
- hot.alter('insert_row', 0);
- expect(spy.calls.count()).toBe(2);
- expect(spy.calls.argsFor(0)[5]).toEqual({id: null});
- expect(spy.calls.argsFor(1)[5]).toEqual({id: 1});
- });
- it('should create new row data matched to dataSchema (data type as `array`) when columns is a function', () => {
- var spy = jasmine.createSpy();
- var hot = handsontable({
- data: [[{id: 1}]],
- dataSchema: [{id: null}],
- columns(column) {
- var colMeta = {};
- if (column === 0) {
- colMeta.data = '0';
- colMeta.renderer = spy;
- } else {
- colMeta = null;
- }
- return colMeta;
- },
- autoColumnSize: false,
- autoRowSize: false
- });
- expect(spy.calls.count()).toBe(1);
- expect(spy.calls.argsFor(0)[5]).toEqual({id: 1});
- spy.calls.reset();
- hot.alter('insert_row', 0);
- expect(spy.calls.count()).toBe(2);
- expect(spy.calls.argsFor(0)[5]).toEqual({id: null});
- expect(spy.calls.argsFor(1)[5]).toEqual({id: 1});
- });
- it('should create an array of objects as the source structure, when dataSchema is defined (as an object) but no data is provided', () => {
- var hot = handsontable({
- startCols: 2,
- minSpareRows: 4,
- dataSchema: {id: null, name: null, surname: null},
- });
- var dataAtRow = hot.getSourceDataAtRow(0);
- expect(Array.isArray(dataAtRow)).toBe(false);
- expect(dataAtRow.id).toEqual(null);
- expect(dataAtRow.name).toEqual(null);
- expect(dataAtRow.surname).toEqual(null);
- });
- it('should create an array of objects as the source structure, when dataSchema is defined (as a function) but no data is provided', () => {
- var hot = handsontable({
- startCols: 2,
- minSpareRows: 4,
- dataSchema() {
- return {id: null, name: null, surname: null};
- },
- });
- var dataAtRow = hot.getSourceDataAtRow(0);
- expect(Array.isArray(dataAtRow)).toBe(false);
- expect(dataAtRow.id).toEqual(null);
- expect(dataAtRow.name).toEqual(null);
- expect(dataAtRow.surname).toEqual(null);
- });
- it('should create an array of objects as the source structure, when dataSchema is defined (as an array with an object) but no data is provided', () => {
- var hot = handsontable({
- startCols: 2,
- minSpareRows: 4,
- dataSchema: [{id: null, name: null, surname: null}],
- });
- var dataAtRow = hot.getSourceDataAtRow(0);
- expect(Array.isArray(dataAtRow)).toBe(false);
- expect(dataAtRow.id).toEqual(null);
- expect(dataAtRow.name).toEqual(null);
- expect(dataAtRow.surname).toEqual(null);
- });
- });
|