/* global describe, it, before */ import chai from 'chai'; import DataManager, { DataError } from '../src/datamanager'; chai.expect(); const expect = chai.expect; describe.only('DataManager instance', () => { it('should initialize rows and columns given options', () => { const datamanager = getDataManagerInstance(); expect(datamanager).has.property('rows'); expect(datamanager).has.property('columns'); expect(datamanager.rowCount).to.equal(3); expect(datamanager._serialNoColumnAdded).to.equal(false); expect(datamanager._checkboxColumnAdded).to.equal(false); }); describe('prepareRows', () => { const datamanager = getDataManagerInstance(); it('should properly build row object when bare minimum options are given', () => { const firstRow = datamanager.getRow(0); expect(firstRow).to.deep.equal([ { colIndex: 0, content: 'Faris', rowIndex: 0 }, { colIndex: 1, content: 'faris@test.com', rowIndex: 0 }, { colIndex: 2, content: 'Software Developer', rowIndex: 0 } ]); }); it('should throw when rows parameter is not an Array', () => { expect(() => datamanager.init({ columns: ['Name'], rows: 2 })).to.throw(DataError, '`rows` must be an array'); }); it('should throw when any of the row\'s length doesn\'t match column length', () => { expect(() => datamanager.init({ columns: ['Name'], rows: [[]] })).to.throw(DataError, 'column length'); }); it('should not throw given valid data', () => { expect(() => datamanager.init({ columns: ['Name'], rows: [['Faris']] })).to.not.throw(); }); }); describe('prepareColumns', () => { const datamanager = getDataManagerInstance(); it('should properly build column object with bare minimum options', () => { const firstColumn = datamanager.getColumn(0); expect(firstColumn.colIndex).eq(0); expect(firstColumn.content).eq('Name'); expect(firstColumn.isHeader).eq(1); }); it('should throw when columns parameter is not an Array', () => { expect(() => datamanager.init({ columns: 2 })).to.throw(DataError, 'must be an array'); }); it('should throw when any of the column is not a string or object', () => { expect(() => datamanager.init({ columns: [2] })).to.throw(DataError, 'must be a string or an object'); }); it('should not throw given valid params', () => { expect(() => datamanager.init({ columns: ['Name'], rows: [['Test']] })).to.not.throw(); }); it('should properly build column object when editable is false', () => { const data = { columns: [ { content: 'Name', editable: false } ], rows: [ ['Faris'] ] }; datamanager.init(data); const firstColumn = datamanager.getColumn(0); expect(firstColumn.colIndex).eq(0); expect(firstColumn.content).eq('Name'); expect(firstColumn.isHeader).eq(1); }); }); describe('prepareNumericColumns', () => { const datamanager = getDataManagerInstance(); it('should assign `align: right` to columns with numeric data', () => { datamanager.init({ columns: ['Name', 'Number'], rows: [ ['Faris', '123'] ] }); const column0 = datamanager.getColumn(0); const column1 = datamanager.getColumn(1); expect(column0.align).to.not.equal('right'); expect(column1.align).to.equal('right'); }); }); }); function getDataManagerInstance(opts = {}) { const options = Object.assign({}, { data: { columns: ['Name', 'Email', 'Occupation'], rows: [ ['Faris', 'faris@test.com', 'Software Developer'], ['Manas', 'manas@test.com', 'Software Engineer'], ['Ameya', 'ameya@test.com', 'Hacker'] ] } }, opts); const datamanager = new DataManager(options); datamanager.init(); return datamanager; }