describe("fbgrid directive", function () { var element; var $scope; var link; var innerScope: fb.IFbGridScope; var dataRows = [{ name: 'Alexander', age: 1337, roll: 1 }, { name: 'Mattias', age: 1 / 1337, roll: 2 }]; var dataRowsMany = []; var dataColumnsMany = [{ Key: 'name', Text: 'Namn', Visible: true, Width: 50, ChangeTrackColumn: false, Sort: { Sortable: true, Reverse: false,} }, { Key: 'age', Text: 'Ålder', Visible: true, Width: 50, ChangeTrackColumn: false, Sort: { Sortable: true } }, { Key: 'roll', Text: 'Roll', Visible: true, ChangeTrackColumn: false, Sort: { Sortable: true }, Converter: function (row) { var value; if (row.roll.value !== undefined) { value = row.roll.value; } else { value = row.roll; } if (value === 1) { return "Säljare"; } else { return "Köpare"; } }, Width: 50 }]; var dataColumns = [{ Key: 'name', Text: 'Namn', Visible: true, Sort: { Sortable: true, Reverse: false }, Width: 50 }, { Key: 'age', Text: 'Ålder', Visible: true, Sort: { Sortable: true, Reverse: false }, Width: 50 }, { Key: 'roll', Text: 'Roll', Visible: true, Sort: { Sortable: true, Reverse: false }, Converter: function (row) { var value; if (row.roll.value !== undefined) { value = row.roll.value; } else { value = row.roll; } if (value === 1) { return "Säljare"; } else { return "Köpare"; } }, Width: 50 }]; var dataColumnsChangeTrack = [ { Key: 'name', Text: 'Namn', Visible: true, ChangeTrackColumn: true, Sort: { Sortable: true, Reverse: false }, Width: 50 }, { Key: 'age', Text: 'Ålder', ChangeTrackColumn: true, Visible: true, Sort: { Sortable: true, Reverse: false }, Width: 50 }, { Key: 'roll', Text: 'Roll', Visible: true, ChangeTrackColumn: true, Sort: { Sortable: true, Reverse: false }, Converter: function (row) { var value; if (row.roll.value !== undefined) { value = row.roll.value; } else { value = row.roll; } if (value === 1) { return "Säljare"; } else { return "Köpare"; } }, Width: 50 }]; var dataRowsChangeTrack = [{ name: new fb.ChangeTrack('Alexander'), age: new fb.ChangeTrack(1337), roll: new fb.ChangeTrack(1) }, { name: new fb.ChangeTrack('Mattias'), age: new fb.ChangeTrack(1 / 1337), roll: new fb.ChangeTrack(2) } ]; describe("vid fungerande uppsättning utan changetrack", function () { beforeEach(angular.mock.module('fasit', 'fbMocks')); beforeEach(inject(function ($compile, $rootScope) { $scope = $rootScope; $scope.fbgridoptions = { columns: dataColumns, rows: dataRows, selectedItems: [], getSortColumnForStatus: function () { return null; } }; var DOM = ''; element = angular.element(DOM); link = $compile(element)($scope); $scope.$digest(); innerScope = $scope.$$childTail; })); it('borde skapa elementet ', function () { expect(element).not.toBe(null); }); it('borde visa en tabell med två rader och två kolumner', function () { //Head expect(element.find('th').length).toBe(3+1+1+1); // +1 checkbox, +1 ikon, +1 är utfyllnadscell expect(element.find('th:eq(2)')[0].textContent).toContain("Namn"); expect(element.find('th:eq(3)')[0].textContent).toContain("Ålder"); expect(element.find('th:eq(4)')[0].textContent).toContain("Roll"); //Body expect(element.find('tbody').find('tr').length).toBe(2); //Två rader expect(element.find('tbody').find('tr:nth(0) td').length).toBe(3 + 1 + 1 + 1); //Tre kolumner, +1 checkbox, +1 ikon, +1 är utfyllnadscell expect(element.find('tbody').find('tr:nth(0) td:eq(2)')[0].textContent.trim()).toBe("Alexander"); expect(element.find('tbody').find('tr:nth(0) td:eq(3)')[0].textContent.trim()).toBe("1337"); expect(element.find('tbody').find('tr:nth(0) td:eq(4)')[0].textContent.trim()).toBe("Säljare"); expect(element.find('tbody').find('tr:last td:eq(4)')[0].textContent.trim()).toBe("Köpare"); }); it('borde returnera tomsträng om man anropar deepFind med oexisterad path', function () { expect(innerScope.deepFind(dataRows[0], { Key: 'da.aw.dw', Text: 'da', ChangeTrackColumn: false})).toBe(''); }); it('borde anropa export för matris vid funktionsanrop', function () { expect(innerScope.deepFind(dataRows[0], { Key: 'da.aw.dw', Text: 'da', ChangeTrackColumn: false })).toBe(''); }); it('borde dölja kolumn när visible sätts till false', function () { $scope.fbgridoptions.columns[1].Visible = false; $scope.$apply(); expect(element.find('th').length).toBe(2 + 1 + 1 + 1); // +1 är utfyllnadscell,+1 ikon, expect(element.find('th:eq(2)')[0].textContent).toContain("Namn"); expect(element.find('th:eq(3)')[0].textContent).toContain("Roll"); $scope.fbgridoptions.columns[1].Visible = true; $scope.$apply(); expect(element.find('th').length).toBe(3 + 1 + 1 + 1); // +1 är utfyllnadscell,+1 ikon, expect(element.find('th:eq(2)')[0].textContent).toContain("Namn"); expect(element.find('th:eq(3)')[0].textContent).toContain("Ålder"); expect(element.find('th:eq(4)')[0].textContent).toContain("Roll"); }); it('borde kunna paginera', function () { innerScope.nextPage(); $scope.fbgridoptions.itemsPerPage = 1; $scope.$digest(); expect(innerScope.options.currentPage).toBe(0); innerScope.nextPage(); expect(innerScope.options.currentPage).toBe(1); innerScope.nextPage(); //Prevpage expect(innerScope.options.currentPage).toBe(1); //Bara 3 sidor. Borde inte kunna komma till tredje innerScope.prevPage(); expect(innerScope.options.currentPage).toBe(0); innerScope.prevPage(); expect(innerScope.options.currentPage).toBe(0); //Borde inte kunna gå lägre än nollte. //Setpage innerScope.setPage(1); expect(innerScope.options.currentPage).toBe(1); innerScope.setPage(0); expect(innerScope.options.currentPage).toBe(0); $scope.fbgridoptions.itemsPerPage = 10; $scope.$digest(); }); }); describe("i tabell utan fördefinierat data", function () { var rootScope; var timeout: ng.ITimeoutService; beforeEach(angular.mock.module('fasit', 'fbMocks')); beforeEach(inject(function ($compile, $rootScope, $timeout: ng.ITimeoutService) { rootScope = $rootScope; $scope = $rootScope.$new(); timeout = $timeout; for (var i = 0; i < 200; i++) { dataRowsMany[i] = { name: "" + i, age: i, roll: 1 }; } $scope.fbgridoptions = { columns: [], rows: [], selectedItems: [], itemsPerPage: 10, getSortColumnForStatus: function () { return null; } }; var DOM = ''; element = angular.element(DOM); link = $compile(element)($scope); $scope.$digest(); innerScope = $scope.$$childTail; })); it('borde kunna sätta data efter initialisering', function () { var dataColumns = [{ Key: 'name', Text: 'Namn', Visible: true, Width: 50 }, { Key: 'age', Text: 'Ålder', Visible: true, Width: 50 }, { Key: 'roll', Text: 'Roll', Visible: true, Converter: function (row) { var value; if (row.roll.value !== undefined) { value = row.roll.value; } else { value = row.roll; } if (value === 1) { return "Säljare"; } else { return "Köpare"; } }, Width: 50 }]; var dataRowsChangeTrack = [{ name: new fb.ChangeTrack('Alexander'), age: new fb.ChangeTrack(1337), roll: new fb.ChangeTrack(1) }, { name: new fb.ChangeTrack('Mattias'), age: new fb.ChangeTrack(1 / 1337), roll: new fb.ChangeTrack(2) } ]; $scope.fbgridoptions.columns = dataColumns; $scope.fbgridoptions.rows = dataRowsChangeTrack; $scope.$apply(); expect(innerScope.currentSlice[0].age.value).toBe(1337); }); it('borde kunna sätta data efter initialisering utan changetrack', function () { var dataColumns = [{ Key: 'name', Text: 'Namn', Visible: true, Width: 50 }, { Key: 'age', Text: 'Ålder', Visible: true, Width: 50 }, { Key: 'roll', Text: 'Roll', Visible: true, Converter: function (row) { var value; if (row.roll.value !== undefined) { value = row.roll.value; } else { value = row.roll; } if (value === 1) { return "Säljare"; } else { return "Köpare"; } }, Width: 50 }]; var dataRows = [{ name: 'Alexander', age: 1337, roll: 1 }, { name: 'Mattias', age: 1 / 1337, roll: 2 }]; $scope.fbgridoptions.columns = dataColumns; $scope.fbgridoptions.rows = dataRows; $scope.$apply(); expect(innerScope.currentSlice[0].age).toBe(1337); }); }); describe("i tabell med mer data", function () { var rootScope; var timeout : ng.ITimeoutService; beforeEach(angular.mock.module('fasit', 'fbMocks')); beforeEach(inject(function ($compile, $rootScope, $timeout: ng.ITimeoutService) { rootScope = $rootScope; $scope = $rootScope.$new(); timeout = $timeout; for (var i = 0; i < 200; i++) { dataRowsMany[i] = { name: ""+i, age: i, roll: 1 }; } $scope.fbgridoptions = { columns: dataColumnsMany, rows: dataRowsMany, selectedItems: [], itemsPerPage: 10, exportFormats: [fb.ExportOption.EXCEL, fb.ExportOption.PDF], //PDF GÖR INGENTING. Ska inte smälla för att man har det med. getSortColumnForStatus: function () { return null; } }; var DOM = ''; element = angular.element(DOM); link = $compile(element)($scope); $scope.$digest(); innerScope = $scope.$$childTail; })); it('borde kunna exportera selectad data till excel', inject(function (exportService) { innerScope.checkToSelect({},innerScope.options.rows[0]); innerScope.checkToSelect({},innerScope.options.rows[1]); innerScope.checkToSelect({},innerScope.options.rows[2]); spyOn(exportService, 'exportExcel').and.callFake(function () { }); innerScope.exportToExcel(); expect(exportService.exportExcel.calls.mostRecent().args[0].length).toBe(4); //3 rader + 1 kolumn expect(exportService.exportExcel.calls.mostRecent().args[1]).toBe("Datauttag"); //Worksheet name //expect(innerScope.windowResize).toHaveBeenCalled(); })); it('borde kunna exportera data till excel utan dolda kolumner', inject(function (exportService) { innerScope.checkToSelect({},innerScope.options.rows[0]); innerScope.checkToSelect({},innerScope.options.rows[1]); innerScope.checkToSelect({},innerScope.options.rows[2]); innerScope.options.columns[0].Visible = false; spyOn(exportService, 'exportExcel').and.callFake(function () { }); innerScope.exportToExcel(); expect(exportService.exportExcel.calls.mostRecent().args[0].length).toBe(4); //3 rader + 1 kolumn expect(exportService.exportExcel.calls.mostRecent().args[0][0].length).toBe(2); expect(exportService.exportExcel.calls.mostRecent().args[0][1].length).toBe(2); expect(exportService.exportExcel.calls.mostRecent().args[1]).toBe("Datauttag"); //Worksheet name //expect(innerScope.windowResize).toHaveBeenCalled(); })); it('borde kunna sortera listan1', function () { $scope.fbgridoptions.columns[1].Sort.Reverse = false; // Kommer inverteras till false innerScope.sort($scope.fbgridoptions.columns[1]); // Sort asc, 0 överst $scope.$apply(); expect(innerScope.currentSlice[0].age).toBe(0); $scope.fbgridoptions.columns[1].Sort.Reverse = true; // Kommer inverteras till true innerScope.sort($scope.fbgridoptions.columns[1]); // Sort desc, 199 överst $scope.$apply(); expect(innerScope.currentSlice[0].age).toBe(199); $scope.fbgridoptions.columns[0].Sort.Sortable = true; $scope.fbgridoptions.columns[0].Sort.Reverse = false; innerScope.sort($scope.fbgridoptions.columns[0]); $scope.$apply(); expect(innerScope.currentSlice[0].name).toBe("0"); }); it('borde kunna paginera', function () { //Setpage innerScope.setPage(13); expect(innerScope.options.currentPage).toBe(13); expect(innerScope.getRange()).toEqual([10, 11, 12, 13, 14, 15, 16]); innerScope.setPage(18); expect(innerScope.options.currentPage).toBe(18); expect(innerScope.getRange()).toEqual([13, 14, 15, 16, 17, 18, 19]); }); it('hoppar till rätt sida efter sidstorlek ändrats', function () { innerScope.setPage(10); innerScope.options.itemsPerPage = 200; $scope.$digest(); expect(innerScope.options.currentPage).toBe(0); }); }); describe("vid fungerande uppsättning med changetrack", function () { beforeEach(angular.mock.module('fasit', 'fbMocks')); beforeEach(inject(function ($compile, $rootScope) { $scope = $rootScope; $scope.fbgridoptions = { columns: dataColumnsChangeTrack, rows: dataRowsChangeTrack, selectedItems: [], getSortColumnForStatus: function () { return null; } }; var DOM = ''; element = angular.element(DOM); link = $compile(element)($scope); $scope.$digest(); innerScope = $scope.$$childTail; })); it('borde skapa elementet ', function () { expect(element).not.toBe(null); }); it('borde visa en tabell med två rader och två kolumner', function () { //Head expect(element.find('th').length).toBe(3 + 1 + 1 + 1); // +1 är utfyllnadscell,+1 ikon expect(element.find('th:eq(2)')[0].textContent).toContain("Namn"); expect(element.find('th:eq(3)')[0].textContent).toContain("Ålder"); expect(element.find('th:eq(4)')[0].textContent).toContain("Roll"); //Body expect(element.find('tbody').find('tr').length).toBe(2); //Två rader expect(element.find('tbody').find('tr:nth(0) td').length).toBe(3 + 1 + 1 + 1); //Två kolumner +1 är utfyllnadscell,+1 ikon expect(element.find('tbody').find('tr:nth(0) td:eq(2)')[0].textContent.trim()).toBe("Alexander"); expect(element.find('tbody').find('tr:nth(0) td:eq(3)')[0].textContent.trim()).toBe("1337"); expect(element.find('tbody').find('tr:nth(0) td:eq(4)')[0].textContent.trim()).toBe("Säljare"); expect(element.find('tbody').find('tr:last td:eq(4)')[0].textContent.trim()).toBe("Köpare"); }); it('borde sätta element till selecteditems vid checkToSelect', function () { innerScope.checkToSelect({},dataRows[0]); expect($scope.fbgridoptions.selectedItems[0].name).toBe("Alexander"); innerScope.checkToSelect({},dataRows[1]); expect($scope.fbgridoptions.selectedItems[1].name).toBe("Mattias"); innerScope.checkToSelect({},dataRows[1]); //Deselect expect($scope.fbgridoptions.selectedItems.length).toBe(1); }); it('borde returnera tomsträng om man anropar deepFind med oexisterad path', function () { expect(innerScope.deepFind(dataRows[0], { Key: 'da.aw.dw', Text: 'da', ChangeTrackColumn: false })).toBe(''); }); it('borde kunna sortera listan2', function () { expect(innerScope.currentSlice[0].age.value).toBe(1337); innerScope.sort($scope.fbgridoptions.columns[1]); $scope.$apply(); $scope.fbgridoptions.columns[1].Sort.Reverse = false; innerScope.sort($scope.fbgridoptions.columns[1]); $scope.$apply(); expect(innerScope.currentSlice[0].age.value).toBe(1/1337); }); }); });