@fusioncharts/datatable
Version:
In memory tabular data storage
1 lines • 38.3 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _datastore=_interopRequireDefault(require("./datastore"));var _datatable=_interopRequireDefault(require("./datatable"));var _cars=require("../sample/data/cars");var _salesTransaction=_interopRequireDefault(require("../sample/data/salesTransaction"));var _salesTransaction2=_interopRequireDefault(require("../sample/data/salesTransaction.schema"));var _operators=require("./operators");var _beforeAfter=require("../../fc-utils/src/ds-utils/before-after");var _datetimeEnums=require("../../fc-utils/src/datetime-enums");var _duration=require("../../fc-utils/src/time-intervals/duration");var data=_cars.data5rows,dataTable=new _datatable.default(null,data,_cars.schema),returnedData=dataTable.getData();describe("DataTable API - getData",(function(){it("Valid data - schema should always be equal",(function(){expect(returnedData.schema).toBe(_cars.schema)}));it("Valid data - if selectedIndices is not provided and getData is called without argument then data should also be same",(function(){expect(JSON.stringify(returnedData.data)).toBe(JSON.stringify(data))}));var dataGetDataString=dataTable.getData("hello"),dataGetDataDecimal=dataTable.getData(2.9765),dataGetDataHigherEnd=dataTable.getData(0,15),dataGetDataHigherEnd2=dataTable.getData(3,15),dataGetDataHigherEnd3=dataTable.getData(2,2.2341),dataGetDataHigherEnd4=dataTable.getData(2,"hello"),dataGetDataInvalid=dataTable.getData(0,0),dataGetDataInvalid2=dataTable.getData("hello","hello"),dataGetDataInvalid3=dataTable.getData(-2,-2),dataGetData2=dataTable.getData(2),data22=dataTable.getData(2,2),data2=dataTable.getData(-2),data3=dataTable.getData(2,-1);it("getData('hello') - check first row first cell",(function(){expect(dataGetDataString.data[0][0]).toBe("chevrolet chevelle malibu")}));it("getData(2.9765) - check first row first cell",(function(){expect(dataGetDataDecimal.data[0][0]).toBe("plymouth satellite")}));it("getData(0,15) - check first row first cell",(function(){expect(dataGetDataHigherEnd.data[dataGetDataHigherEnd.data.length-1][0]).toBe("ford torino")}));it("getData(3,15) - check first row first cell",(function(){expect(dataGetDataHigherEnd2.data[dataGetDataHigherEnd2.data.length-1][0]).toBe("ford torino")}));it("getData(2, 2.2341) - check first row first cell",(function(){expect(dataGetDataHigherEnd3.data[dataGetDataHigherEnd3.data.length-1][0]).toBe("amc rebel sst")}));it("getData(2, 'hello') - check first row first cell",(function(){expect(dataGetDataHigherEnd4.data[dataGetDataHigherEnd4.data.length-1][0]).toBe("ford torino")}));it("getData(0,0) - check length - should be 0",(function(){expect(dataGetDataInvalid.data.length).toBe(0)}));it("getData(0,0) - schema should be same",(function(){expect(dataGetDataInvalid.schema).toBe(_cars.schema)}));it("getData(hello,hello) - check length- should be 5",(function(){expect(dataGetDataInvalid2.data.length).toBe(5)}));it("getData(hello,hello) - schema should be same",(function(){expect(dataGetDataInvalid2.schema).toBe(_cars.schema)}));it("getData(-2,-2) - check length - should be 0",(function(){expect(dataGetDataInvalid3.data.length).toBe(0)}));it("getData(-2,-2) - schema should be same",(function(){expect(dataGetDataInvalid3.schema).toBe(_cars.schema)}));it("getData(2) - check first row first cell",(function(){expect(dataGetData2.data[0][0]).toBe("plymouth satellite")}));it("getData(2) - check last row first cell",(function(){expect(dataGetData2.data[dataGetData2.data.length-1][0]).toBe("ford torino")}));it("getData(2,2) - schema should always be equal",(function(){expect(data22.schema).toBe(_cars.schema)}));it("getData(2,2) - check number of items",(function(){expect(data22.data.length).toBe(2)}));it("getData(2,2) - check first row first cell",(function(){expect(data22.data[0][0]).toBe("plymouth satellite")}));it("getData(2,2) - check last row first cell",(function(){expect(data22.data[data22.data.length-1][0]).toBe("amc rebel sst")}));it("getData(-2) - should return last 2 elements - check first row first cell",(function(){expect(data2.data[0][0]).toBe("amc rebel sst")}));it("getData(-2) - should return last 2 elements - check first row first cell",(function(){expect(data2.data[data2.data.length-1][0]).toBe("ford torino")}));it("getData(2, -1) - should return elements starting from - check first row first cell",(function(){expect(data3.data[0][0]).toBe("plymouth satellite")}));it("getData(2, -1) - should return elements starting from - check first row first cell",(function(){expect(data3.data[data3.data.length-1][0]).toBe("amc rebel sst")}))}));describe("DataTable API - count",(function(){it("Count of default data - should be 5",(function(){expect(dataTable.count()).toBe(5)}));it("FDT_TC_062 - for null data count should be 0",(function(){var DataTable4=new _datatable.default(null,null,_cars.schema);expect(DataTable4.count()).toBe(0)}))}));describe("DataTable API - getSchema",(function(){it("getSchema - check the reference - should be equal",(function(){expect(dataTable.getSchema()).toBe(_cars.schema)}))}));describe("DataTable API - getDataStore",(function(){it("getDataStore - check reference - should be equal",(function(){var dataStore=new _datastore.default(data,_cars.schema),DataTableTable=dataStore.getDataTable();expect(DataTableTable.getDataStore()).toBe(dataStore)}))}));describe("DataTable API - indexOf",(function(){it("indexOf - indexOf - Weight_in_lbs - should be 5",(function(){expect(dataTable.indexOf("Weight_in_lbs")).toBe(5)}));it("indexOf - indexOf - FusionCharts - should be -1",(function(){expect(dataTable.indexOf("FusionCharts")).toBe(-1)}));it("indexOf - indexOf with null or undefined argument - should return null",(function(){expect(dataTable.indexOf()).toBe(null)}))}));describe("DataTable API - min",(function(){it("min - with no arguments - should return null",(function(){expect(dataTable.min()).toBeNull()}));it("min - with wrong arguments - should return null",(function(){expect(dataTable.min("hello")).toBeNull()}));it("min - HorsePower - should return 130",(function(){expect(dataTable.min("Horsepower")).toBe(130)}))}));describe("DataTable API - max",(function(){it("max - with no arguments - should return null",(function(){expect(dataTable.max()).toBeNull()}));it("max - with wrong arguments - should return null",(function(){expect(dataTable.max("hello")).toBeNull()}));it("max - HorsePower - should return 130",(function(){expect(dataTable.max("Horsepower")).toBe(165)}))}));describe("DataTable API - unique",(function(){it("unique - with no arguments - should return empty array",(function(){expect(dataTable.unique()).toEqual([])}));it("unique - with wrong arguments - should return empty array",(function(){expect(dataTable.unique("hello")).toEqual([])}));it("unique - HorsePower - should return array with 4 elements",(function(){expect(dataTable.unique("Horsepower")).toEqual([130,165,150,140])}));it("unique - Cylinders - should return array with one element",(function(){expect(dataTable.unique("Cylinders")).toEqual([8])}))}));describe("DataTable API - extents",(function(){it("extents - with no arguments - should return null",(function(){expect(dataTable.extents()).toBeNull()}));it("extents - with wrong arguments - should return null",(function(){expect(dataTable.extents("hello")).toBeNull()}));it("extents - HorsePower - should return 130 & 165",(function(){expect(dataTable.extents("Horsepower")).toEqual({min:130,max:165})}))}));describe("DataTable id generation",(function(){it("keeps the id same if id is provided in constructor",(function(){var dataTableTest=new _datatable.default(null,_cars.data5rows,_cars.schema,null,null,null,"test-id");expect(dataTableTest._id).toEqual("test-id")}));it("generates an id if the table id is not provided",(function(){var dataTableTest=new _datatable.default(null,_cars.data5rows,_cars.schema);expect(dataTableTest._id).toBeDefined()}));it("generates an id for the child table when both parent and child table has no id",(function(){var dataTableTest=new _datatable.default(null,_cars.data5rows,_cars.schema),dataTableTest2=new _datatable.default(null,_cars.data5rows,_cars.schema,null,dataTable);expect(dataTableTest._id).toBeDefined();expect(dataTableTest2._id).toBeDefined()}));it("generates an id for the child table when parent has id but child has no id",(function(){var dataTableTest=new _datatable.default(null,_cars.data5rows,_cars.schema,null,null,null,"test-id"),dataTableTest2=new _datatable.default(null,_cars.data5rows,_cars.schema,null,dataTableTest),dataTableTest3=new _datatable.default(null,_cars.data5rows,_cars.schema,null,dataTableTest);expect(dataTableTest._id).toEqual("test-id");expect(dataTableTest2._id).toEqual("test-id_1");expect(dataTableTest3._id).toEqual("test-id_2")}))}));describe("DataTable API - query",(function(){var data4=[].concat(_cars.data5rows,_cars.data5rows).sort((function(a,b){return a[1]-b[1]})),dataStore=new _datastore.default(data4,_cars.schema,{enableIndex:false}),carsDt=dataStore.getDataTable(),opsDt=carsDt.query([(0,_operators.indexColBetween)(1,16,17),(0,_operators.select)(["Name","Miles_per_Gallon","Origin"])]),opsSel,opsDtData,opsSelData,incorrectOps,incorrectOpsData,incorrectOps2,incorrectOpsData2;opsDtData=opsDt.getData();it("Generates an id for the child table",(function(){expect(opsDt._id).toBeDefined()}));it("Small cars data - Miles_Per_Gallon between 16 & 17 - select 3 columns - number of data should be 4",(function(){expect(opsDtData.data.length).toBe(4)}));it("Small cars data - Miles_Per_Gallon between 16 & 17 - select 3 columns - schema should have 3 columns",(function(){expect(opsDtData.schema.length).toBe(3)}));it("Small cars data - Miles_Per_Gallon between 16 & 17 - select 3 columns - schema columns must match",(function(){expect(opsDtData.schema[0].name).toBe("Name");expect(opsDtData.schema[1].name).toBe("Miles_per_Gallon");expect(opsDtData.schema[2].name).toBe("Origin")}));opsSel=carsDt.query((0,_operators.select)(["Name","Origin"]));opsSelData=opsSel.getData();it("Small cars data - select 2 columns - schema should have 2 columns",(function(){expect(opsSelData.schema.length).toBe(2)}));it("Small cars data - select 2 columns - schema columns must match",(function(){expect(opsSelData.schema[0].name).toBe("Name");expect(opsSelData.schema[1].name).toBe("Origin")}));incorrectOps=carsDt.query([18,(0,_operators.select)(["Name","Origin"]),"Wrong_Name"]);incorrectOpsData=incorrectOps.getData();it("Small cars data - select 2 columns with other wrong arguments - schema should have 2 columns",(function(){expect(incorrectOpsData.schema.length).toBe(2)}));it("Small cars data - select 2 columns with other wrong arguments - schema columns must match",(function(){expect(incorrectOpsData.schema[0].name).toBe("Name");expect(incorrectOpsData.schema[1].name).toBe("Origin")}));it("Small cars data - select 2 columns with other wrong arguments - number of data must be same",(function(){expect(incorrectOpsData.data.length).toBe(data4.length)}));incorrectOps2=carsDt.query(["infinity",0,new Date("1988-8-5")]);incorrectOpsData2=incorrectOps2.getData();it("Incorrect query arguments - check schema length - should be equal to original length",(function(){expect(incorrectOpsData2.schema.length).toBe(9)}))}));describe("DataTable API - addColumns",(function(){var dataStore=new _datastore.default(_cars.data5rows,_cars.schema,{enableIndex:false}),carsDt=dataStore.getDataTable(),opsDtData,newColumns,newSchema,opsSelDT,opsSelData;it("FDT_TC_078, FDT_TC_079, FDT_TC_080, FDT_TC_087, FDT_TC_088 - Basic tests",(function(){var durationMonth=(0,_duration.duration)(_datetimeEnums.DatetimeUnits.Month);newColumns=[{name:"Kms_per_Litre",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}},{name:"Nickname",type:"string",calcFn:function calcFn(row,columns){return row[columns.Name].split(" ")[0]}},{name:"Previous Month",type:"date",calcFn:function calcFn(row,columns){return(0,_beforeAfter.before)(durationMonth,row[columns.Year])},format:"%Y-%m-%d",enableUTC:true}];carsDt.addColumns.apply(carsDt,newColumns);newSchema=_cars.schema.slice(0);newColumns.forEach((function(row){var dummyRow={name:row.name,type:row.type,calcFn:row.calcFn};if(row.format)dummyRow.format=row.format;if(row.enableUTC)dummyRow.enableUTC=row.enableUTC;newSchema.push(dummyRow)}));opsDtData=carsDt.getData();expect(opsDtData.schema).toEqual(newSchema);expect(opsDtData.data[0][9]).toBe(opsDtData.data[0][1]*.354);expect(opsDtData.data[0][10]).toBe("chevrolet");expect(opsDtData.data[0][11]).toBe(-26784e5)}));describe("argument other than object or array of objects should throw error",(function(){it("array of objects should work",(function(){var newColumn={name:"Kms_per_Litre - 1",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}};newColumns=[newColumn];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData).toBeDefined()}));it("object should work",(function(){var newColumn={name:"Kms_per_Litre - 2",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}};carsDt.addColumns(newColumn);opsDtData=carsDt.getData();expect(opsDtData).toBeDefined()}));it("string shouldn't work",(function(){expect((function(){carsDt.addColumns("wrong")})).toThrow()}));it("number shouldn't work",(function(){expect((function(){carsDt.addColumns(1)})).toThrow()}));it("array of strings shouldn't work",(function(){expect((function(){carsDt.addColumns(["wrong","incorrect"])})).toThrow()}));it("array of numbers shouldn't work",(function(){expect((function(){carsDt.addColumns([1,2,3])})).toThrow()}));it("array of arrays shouldn't work",(function(){newColumns=[{name:"Kms_per_Litre - 2",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}}];expect((function(){carsDt.addColumns([newColumns])})).toThrow()}))}));it("FDT_TC_081 - name cannot be blank",(function(){newColumns=[{type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}}];expect((function(){carsDt.addColumns.apply(carsDt,newColumns)})).toThrow()}));it("FDT_TC_082, FDT_TC_083 - name must be unique",(function(){newColumns=[{name:"Miles_per_Gallon",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]}},{name:"Miles_per_Gallon",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]}}];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-2].name).toBe("Miles_per_Gallon 1");expect(opsDtData.schema[opsDtData.schema.length-1].name).toBe("Miles_per_Gallon 2")}));it("FDT_TC_085 - missing type should use string",(function(){newColumns=[{name:"FDT_TC_085 - Some field",calcFn:function calcFn(row,columns){return row[columns.Name]}}];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-1].type).toBe("string")}));it("FDT_TC_086 - incorrect type should use string",(function(){newColumns=[{name:"FDT_TC_086 - Some field",type:"wrong",calcFn:function calcFn(row,columns){return row[columns.Name]}}];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-1].type).toBe("string")}));it("calcFn should be a function",(function(){newColumns=[{name:"calcFn - Some field",type:"number",calcFn:"abc"}];expect((function(){carsDt.addColumns.apply(carsDt,newColumns)})).toThrow()}));it("FDT_TC_089 - missing calcFn should change schema, but keep empty data",(function(){newColumns=[{name:"FDT_TC_089 - Some field",type:"string"}];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-1]).toEqual(newColumns[0]);expect(opsDtData.data[0][opsDtData.schema.length-1]).toBe(undefined)}));it("FDT_TC_090 - when value doesn't match type - number type results NaN",(function(){newColumns=[{name:"FDT_TC_090 - Some field",type:"number",calcFn:function calcFn(row,columns){return"text"}}];carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-1]).toEqual(newColumns[0]);expect(opsDtData.data[0][opsDtData.schema.length-1]).toBe(NaN)}));it("FDT_TC_093 - does not propagate across related DTs",(function(){newColumns=[{name:"FDT_TC_093 - Kms_per_Litre",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}}];opsSelDT=carsDt.query((0,_operators.select)(["Name","Origin"]));carsDt.addColumns.apply(carsDt,newColumns);opsDtData=carsDt.getData();expect(opsDtData.schema[opsDtData.schema.length-1]).toEqual(newColumns[0]);expect(opsDtData.data[0][opsDtData.schema.length-1]).toBe(opsDtData.data[0][1]*.354);opsSelData=opsSelDT.getData();expect(opsSelData.schema[opsSelData.schema.length-1]).not.toEqual(newColumns[0]);expect(opsSelData.schema.length).toBe(2)}));describe("'updated' event",(function(){it("FDT_TC_106 - single column addition triggers updated event",(function(){var newColumn={name:"FDT_TC_106",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}},fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);newColumns=[newColumn];carsDt.addColumns.apply(carsDt,newColumns);expect(fnRunFlag).toBe(true)}));it("FDT_TC_107 - multiple column addition triggers updated event",(function(){var multipleNewColumns=[{name:"Kms_per_Litre - FDT_TC_107",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}},{name:"Nickname - FDT_TC_107",type:"string",calcFn:function calcFn(row,columns){return row[columns.Name].split(" ")[0]}}],fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.addColumns.apply(carsDt,multipleNewColumns);expect(fnRunFlag).toBe(true)}));describe("FDT_TC_110 - other functions should not trigger updated event",(function(){it("getDate()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.getData();expect(fnRunFlag).toBe(false)}));it("count()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.count();expect(fnRunFlag).toBe(false)}));it("getSchema()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.getSchema();expect(fnRunFlag).toBe(false)}));it("getDataStore()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.getDataStore();expect(fnRunFlag).toBe(false)}));it("indexOf()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.indexOf("Name");expect(fnRunFlag).toBe(false)}));it("min()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.min("Miles_per_Gallon");expect(fnRunFlag).toBe(false)}));it("max()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.max("Miles_per_Gallon");expect(fnRunFlag).toBe(false)}));it("unique()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.unique("Name");expect(fnRunFlag).toBe(false)}));it("extents()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.extents("Miles_per_Gallon");expect(fnRunFlag).toBe(false)}));it("query()",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt.on("updated",dummyFn);carsDt.query([(0,_operators.indexColBetween)(1,16,17),(0,_operators.select)(["Name","Miles_per_Gallon","Origin"])]);expect(fnRunFlag).toBe(false)}))}));it("FDT_TC_111 - sibling datatables should not trigger updated event",(function(){var newColumn={name:"FDT_TC_106",type:"number",calcFn:function calcFn(row,columns){return row[columns.Miles_per_Gallon]*.354}},fnRunCount=0,dummyFn=function dummyFn(){++fnRunCount};carsDt.query([(0,_operators.indexColBetween)(1,16,17)]);carsDt.on("updated",dummyFn);newColumns=[newColumn];carsDt.addColumns.apply(carsDt,newColumns);expect(fnRunCount).toBe(1)}))}))}));jest.useFakeTimers();describe("DataTable API - on",(function(){it("FDT_TC_101 - 1 - handler is bound to an event through on",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};dataTable.on("FDT_TC_101 - 1",dummyFn);setTimeout((function(){dataTable._trigger("FDT_TC_101 - 1")}),200);jest.advanceTimersByTime(500);expect(fnRunFlag).toBe(true)}));it("FDT_TC_101 - 2 - multiple handlers are bound to an event through on",(function(){var fn1RunFlag=false,fn2RunFlag=false,dummyFn1=function dummyFn1(){fn1RunFlag=true},dummyFn2=function dummyFn2(){fn2RunFlag=true};dataTable.on("FDT_TC_101 - 2",[dummyFn1,dummyFn2]);setTimeout((function(){dataTable._trigger("FDT_TC_101 - 2")}),200);jest.advanceTimersByTime(500);expect(fn1RunFlag).toBe(true);expect(fn2RunFlag).toBe(true)}));it("FDT_TC_101 - 3 - multiple handlers bound to an event execute in order",(function(){var arrFlag=[],dummyFn1=function dummyFn1(){arrFlag.push("dummyFn1")},dummyFn2=function dummyFn2(){arrFlag.push("dummyFn2")};dataTable.on("FDT_TC_101 - 3",[dummyFn1,dummyFn2]);setTimeout((function(){dataTable._trigger("FDT_TC_101 - 3")}),200);jest.advanceTimersByTime(500);expect(arrFlag.length).toBe(2);expect(arrFlag).toEqual(["dummyFn1","dummyFn2"])}));it("FDT_TC_101 - 4 - empty event name throws error",(function(){var dummyFn=function dummyFn(){return true};expect((function(){dataTable.on("",dummyFn)})).toThrow();expect((function(){dataTable.on(dummyFn)})).toThrow()}));it("FDT_TC_101 - 5 - empty handler throws error",(function(){expect((function(){dataTable.on("FDT_TC_101 - 5")})).toThrow()}))}));describe("DataTable API - off",(function(){it("FDT_TC_036 - only given handler is removed",(function(){var fn1RunCount=0,fn2RunCount=0,dummyFn1=function dummyFn1(){fn1RunCount++},dummyFn2=function dummyFn2(){fn2RunCount++};dataTable.on("FDT_TC_036",[dummyFn1,dummyFn2]);setTimeout((function(){dataTable._trigger("FDT_TC_036")}),200);jest.advanceTimersByTime(200);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1);setTimeout((function(){dataTable.off("FDT_TC_036",dummyFn1)}),300);setTimeout((function(){dataTable._trigger("FDT_TC_036")}),400);jest.advanceTimersByTime(400);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(2)}));it("multiple handlers can be removed by providing an array",(function(){var fn1RunCount=0,fn2RunCount=0,dummyFn1=function dummyFn1(){fn1RunCount++},dummyFn2=function dummyFn2(){fn2RunCount++};dataTable.on("FDT_TC_031x",[dummyFn1,dummyFn2]);setTimeout((function(){dataTable._trigger("FDT_TC_031x")}),200);jest.advanceTimersByTime(200);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1);setTimeout((function(){dataTable.off("FDT_TC_031x",[dummyFn1,dummyFn2])}),300);setTimeout((function(){dataTable._trigger("FDT_TC_031x")}),400);jest.advanceTimersByTime(400);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1)}));it("FDT_TC_038 - missing handler removes all from event",(function(){var fn1RunCount=0,fn2RunCount=0,dummyFn1=function dummyFn1(){fn1RunCount++},dummyFn2=function dummyFn2(){fn2RunCount++};dataTable.on("FDT_TC_038",[dummyFn1,dummyFn2]);setTimeout((function(){dataTable._trigger("FDT_TC_038")}),200);jest.advanceTimersByTime(200);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1);setTimeout((function(){dataTable.off("FDT_TC_038")}),300);setTimeout((function(){dataTable._trigger("FDT_TC_038")}),400);jest.advanceTimersByTime(400);expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1)}));it("FDT_TC_034 - empty event name throws error",(function(){var dummyFn=function dummyFn(){return true};expect((function(){dataTable.off("",dummyFn)})).toThrow();expect((function(){dataTable.off(dummyFn)})).toThrow()}))}));describe("DataTable API - trigger",(function(){it("FDT_TC_040 - empty eventname throws error",(function(){var dummyFn=function dummyFn(){return true};dataTable.on("FDT_TC_031",dummyFn);expect((function(){dataTable._trigger("")})).toThrow();expect((function(){dataTable._trigger([])})).toThrow()}))}));describe("DataTable API - getMinDiff",(function(){var salesDS=new _datastore.default(_salesTransaction.default,_salesTransaction2.default,{enableIndex:true,indexBy:"Time"}),salesDT=salesDS.getDataTable();it("Method will return minimum difference between datetimes",(function(){var minDiff=salesDT.getMinDiff("Time");expect(minDiff).toBe(0)}));it("Incorrect column name returns null",(function(){var minDiff=salesDT.getMinDiff("Time wrong");expect(minDiff).toBe(null)}))}));describe("DataTable API - dispose",(function(){var dataStore=new _datastore.default(_cars.data5rows,_cars.schema,{enableIndex:false}),carsDt,opsDt;it("FDT_TC_103 - datatable references and the datatable are removed",(function(){carsDt=dataStore.getDataTable();opsDt=carsDt.query([(0,_operators.indexColBetween)(1,16,17),(0,_operators.select)(["Name","Miles_per_Gallon","Origin"])]);opsDt.getData();expect(opsDt._dataStore).toBeDefined();expect(opsDt._parentTable).toBeDefined();expect(opsDt._children).toBeDefined();expect(opsDt._opsFunnel).toBeDefined();expect(opsDt._data).toBeDefined();expect(opsDt._schema).toBeDefined();expect(opsDt._config).toBeDefined();expect(opsDt._result).toBeDefined();opsDt.dispose();expect(opsDt._dataStore).toBeUndefined();expect(opsDt._parentTable).toBeUndefined();expect(opsDt._children).toBeUndefined();expect(opsDt._opsFunnel).toBeUndefined();expect(opsDt._data).toBeUndefined();expect(opsDt._schema).toBeUndefined();expect(opsDt._config).toBeUndefined();expect(opsDt._result).toBeUndefined();expect(opsDt).toEqual({})}));it("FDT_TC_104 - parent datatable and datasource are not affected",(function(){carsDt=dataStore.getDataTable();opsDt=carsDt.query([(0,_operators.indexColBetween)(1,16,17),(0,_operators.select)(["Name","Miles_per_Gallon","Origin"])]);carsDt.getData();opsDt.getData();opsDt.dispose();expect(dataStore).toBeDefined();expect(dataStore.dataTables).toBeDefined();expect(dataStore._defaultDataTable).toBeDefined();expect(dataStore).not.toEqual({});expect(carsDt._dataStore).toBeDefined();expect(carsDt._children).toBeDefined();expect(carsDt._data).toBeDefined();expect(carsDt._schema).toBeDefined();expect(carsDt._config).toBeDefined();expect(carsDt._result).toBeDefined();expect(carsDt).not.toEqual({});expect(opsDt._dataStore).toBeUndefined();expect(opsDt._parentTable).toBeUndefined();expect(opsDt._children).toBeUndefined();expect(opsDt._opsFunnel).toBeUndefined();expect(opsDt._data).toBeUndefined();expect(opsDt._schema).toBeUndefined();expect(opsDt._config).toBeUndefined();expect(opsDt._result).toBeUndefined();expect(opsDt).toEqual({})}));it("FDT_TC_104 - child datatable is removed",(function(){carsDt=dataStore.getDataTable();opsDt=carsDt.query([(0,_operators.indexColBetween)(1,16,17),(0,_operators.select)(["Name","Miles_per_Gallon","Origin"])]);carsDt.getData();opsDt.getData();expect(carsDt._dataStore).toBeDefined();expect(carsDt._children).toBeDefined();expect(carsDt._data).toBeDefined();expect(carsDt._schema).toBeDefined();expect(carsDt._config).toBeDefined();expect(carsDt._result).toBeDefined();carsDt.dispose();expect(carsDt._dataStore).toBeUndefined();expect(carsDt._children).toBeUndefined();expect(carsDt._data).toBeUndefined();expect(carsDt._schema).toBeUndefined();expect(carsDt._config).toBeUndefined();expect(carsDt._result).toBeUndefined();expect(carsDt).toEqual({});expect(opsDt).toEqual({})}));it("FDT_TC_112 - disposed event is triggered",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt=dataStore.getDataTable();carsDt.on("disposed",dummyFn);carsDt.dispose();expect(fnRunFlag).toBe(true)}));describe("FDT_TC_113 - on method with disposed event",(function(){it("FDT_TC_031 - handler is bound to an event through on",(function(){var fnRunFlag=false,dummyFn=function dummyFn(){fnRunFlag=true};carsDt=dataStore.getDataTable();carsDt.on("disposed",dummyFn);carsDt.dispose();expect(fnRunFlag).toBe(true)}));it("FDT_TC_031 - multiple handlers are bound to an event through on",(function(){var fn1RunFlag=false,fn2RunFlag=false,dummyFn1=function dummyFn1(){fn1RunFlag=true},dummyFn2=function dummyFn2(){fn2RunFlag=true};carsDt=dataStore.getDataTable();carsDt.on("disposed",[dummyFn1,dummyFn2]);carsDt.dispose();expect(fn1RunFlag).toBe(true);expect(fn2RunFlag).toBe(true)}));it("FDT_TC_033 - multiple handlers bound to an event execute in order",(function(){var arrFlag=[],dummyFn1=function dummyFn1(){arrFlag.push("dummyFn1")},dummyFn2=function dummyFn2(){arrFlag.push("dummyFn2")};carsDt=dataStore.getDataTable();carsDt.on("disposed",[dummyFn1,dummyFn2]);carsDt.dispose();expect(arrFlag.length).toBe(2);expect(arrFlag).toEqual(["dummyFn1","dummyFn2"])}));it("FDT_TC_034 - empty event name throws error",(function(){var dummyFn=function dummyFn(){return true};carsDt=dataStore.getDataTable();expect((function(){carsDt.on("",dummyFn)})).toThrow();expect((function(){carsDt.on(dummyFn)})).toThrow();carsDt.dispose()}));it("FDT_TC_035 - empty handler throws error",(function(){carsDt=dataStore.getDataTable();expect((function(){carsDt.on("disposed")})).toThrow()}))}));describe("FDT_TC_048 - off method with disposed event",(function(){it("multiple handlers can be removed by providing an array",(function(){var fn1RunCount=0,fn2RunCount=0,dummyFn1=function dummyFn1(){fn1RunCount++},dummyFn2=function dummyFn2(){fn2RunCount++};carsDt=dataStore.getDataTable();carsDt.on("disposed",[dummyFn1,dummyFn2]);carsDt.dispose();expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1);carsDt.off("disposed",[dummyFn1,dummyFn2]);carsDt.dispose();expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1)}));it("FDT_TC_038 - missing handler removes all from event",(function(){var fn1RunCount=0,fn2RunCount=0,dummyFn1=function dummyFn1(){fn1RunCount++},dummyFn2=function dummyFn2(){fn2RunCount++};carsDt=dataStore.getDataTable();carsDt.on("disposed",[dummyFn1,dummyFn2]);carsDt.dispose();expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1);carsDt.off("disposed");carsDt.dispose();expect(fn1RunCount).toBe(1);expect(fn2RunCount).toBe(1)}));it("FDT_TC_034 - empty event name throws error",(function(){var dummyFn=function dummyFn(){return true};carsDt=dataStore.getDataTable();expect((function(){carsDt.off("",dummyFn)})).toThrow();expect((function(){carsDt.off(dummyFn)})).toThrow();carsDt.dispose()}))}))}));describe("Edge cases",(function(){describe("Sort operation should change indexBy in config",(function(){var dataArr=[["Mike",10,12],["John",11,18],["Alice",14,12],["John",13,10],["Alice",12,16],["John",17,11],["John",15,12],["Alice",13,10],["Mike",11,7],["Alice",13,11]],schemaArr=[{name:"Name",type:"string"},{name:"Age",type:"number"},{name:"Class",type:"number"}],DS,DT,ageSorted,classStudents;it("With DataTable indexBy set, sorting changes it",(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)({column:"Age"}));ageSorted.getData();expect(ageSorted._result.config.indexBy).toBe("Age")}));it('With DataTable indexBy set to "X", sort on "Y", then group on "X"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)({column:"Age"}));classStudents=ageSorted.query((0,_operators.groupBy)([{column:"Class"}],[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(6);expect(classStudents._result.data).toEqual([[12,3],[7,1],[18,1],[16,1],[10,2],[11,2]])}));it('With DataTable indexBy set to "X", sort on "Y", then group on "Y"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)({column:"Age"}));classStudents=ageSorted.query((0,_operators.groupBy)([{column:"Age"}],[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe("Age");expect(classStudents._result.config.enableIndex).toBe(true);expect(classStudents._result.data.length).toBe(7);expect(classStudents._result.data).toEqual([[10,1],[11,2],[12,1],[13,3],[14,1],[15,1],[17,1]])}));it('With DataTable indexBy set to "X", sort on "Y", then pivot with grouping on "X"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)({column:"Age"}));classStudents=ageSorted.query((0,_operators.pivot)([{column:"Class"}],"Name",[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(6);expect(classStudents._result.data).toEqual([[12,1,1,1],[7,undefined,undefined,1],[18,undefined,1,undefined],[16,1,undefined,undefined],[10,1,1,undefined],[11,1,1,undefined]])}));it('With DataTable indexBy set to "X", sort on "Y", then pivot with grouping on "Y"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)({column:"Age"}));classStudents=ageSorted.query((0,_operators.pivot)([{column:"Age"}],"Name",[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe("Age");expect(classStudents._result.config.enableIndex).toBe(true);expect(classStudents._result.data.length).toBe(7);expect(classStudents._result.data).toEqual([[10,undefined,undefined,1],[11,undefined,1,1],[12,1],[13,2,1],[14,1],[15,undefined,1],[17,undefined,1]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then group on "X"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)([{column:"Name"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.groupBy)([{column:"Class"}],[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(6);expect(classStudents._result.data).toEqual([[16,1],[10,2],[11,2],[12,3],[18,1],[7,1]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then group on "Y"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)([{column:"Name"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.groupBy)([{column:"Name"}],[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe("Name");expect(classStudents._result.config.enableIndex).toBe(true);expect(classStudents._result.data.length).toBe(3);expect(classStudents._result.data).toEqual([["Alice",4],["John",4],["Mike",2]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then group on "Z"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)([{column:"Name"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.groupBy)([{column:"Age"}],[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(7);expect(classStudents._result.data).toEqual([[12,1],[13,3],[14,1],[11,2],[15,1],[17,1],[10,1]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then pivot with grouping on "X"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Class"});ageSorted=DT.query((0,_operators.sort)([{column:"Name"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.pivot)([{column:"Class"}],"Name",[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(6);expect(classStudents._result.data).toEqual([[16,1,undefined,undefined],[10,1,1,undefined],[11,1,1,undefined],[12,1,1,1],[18,undefined,1,undefined],[7,undefined,undefined,1]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then pivot with grouping on "Y"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});ageSorted=DT.query((0,_operators.sort)([{column:"Class"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.pivot)([{column:"Class"}],"Name",[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe("Class");expect(classStudents._result.config.enableIndex).toBe(true);expect(classStudents._result.data.length).toBe(6);expect(classStudents._result.data).toEqual([[7,undefined,undefined,1],[10,1,1],[11,1,1],[12,1,1,1],[16,1],[18,undefined,1]])}));it('With DataTable indexBy set to "X", multi sort on "Y", "Z", then pivot with grouping on "Z"',(function(){DS=new _datastore.default;DT=DS.createDataTable(dataArr,schemaArr,{enableIndex:true,indexBy:"Name"});ageSorted=DT.query((0,_operators.sort)([{column:"Class"},{column:"Age"}]));classStudents=ageSorted.query((0,_operators.pivot)([{column:"Age"}],"Name",[{column:"Name",operation:"count"}]));classStudents.getData();expect(classStudents._result.config.indexBy).toBe(undefined);expect(classStudents._result.config.enableIndex).toBe(false);expect(classStudents._result.data.length).toBe(7);expect(classStudents._result.data).toEqual([[11,undefined,1,1],[13,2,1,undefined],[17,undefined,1,undefined],[10,undefined,undefined,1],[14,1,undefined,undefined],[15,undefined,1,undefined],[12,1,undefined,undefined]])}))}))}));
;