////////////////////////////////////////////////////////////////////////// // // pgAdmin 4 - PostgreSQL Tools // // Copyright (C) 2013 - 2017, The pgAdmin Development Team // This software is released under the PostgreSQL Licence // ////////////////////////////////////////////////////////////////////////// import $ from 'jquery'; import Slick from 'slickgrid'; import 'slickgrid.grid'; import clipboard from '../../../pgadmin/static/js/selection/clipboard'; import copyData from '../../../pgadmin/static/js/selection/copy_data'; import RangeSelectionHelper from 'sources/selection/range_selection_helper'; import XCellSelectionModel from 'sources/selection/xcell_selection_model'; describe('copyData', function () { var grid, sqlEditor, gridContainer, buttonPasteRow; var SlickGrid; beforeEach(function () { SlickGrid = Slick.Grid; var data = [[1, 'leopord', '12'], [2, 'lion', '13'], [3, 'puma', '9']]; var columns = [ { id: 'row-header-column', name: 'row header column name', selectable: false, display_name: 'row header column name', column_type: 'text', }, { name: 'id', pos: 0, label: 'id
numeric', cell: 'number', can_edit: false, type: 'numeric', }, { name: 'brand', pos: 1, label: 'flavor
character varying', cell: 'string', can_edit: false, type: 'character varying', }, { name: 'size', pos: 2, label: 'size
numeric', cell: 'number', can_edit: false, type: 'numeric', }, ] ; gridContainer = $('
'); $('body').append(gridContainer); buttonPasteRow = $(''); $('body').append(buttonPasteRow); grid = new SlickGrid('#grid', data, columns, {}); grid.setSelectionModel(new XCellSelectionModel()); sqlEditor = {slickgrid: grid}; }); afterEach(function () { gridContainer.remove(); buttonPasteRow.remove(); }); describe('when rows are selected', function () { beforeEach(function () { grid.getSelectionModel().setSelectedRanges([ RangeSelectionHelper.rangeForRow(grid, 0), RangeSelectionHelper.rangeForRow(grid, 2)] ); }); it('copies them', function () { spyOn(clipboard, 'copyTextToClipboard'); copyData.apply(sqlEditor); expect(sqlEditor.copied_rows.length).toBe(2); expect(clipboard.copyTextToClipboard).toHaveBeenCalled(); expect(clipboard.copyTextToClipboard.calls.mostRecent().args[0]).toContain('1,\'leopord\',\'12\''); expect(clipboard.copyTextToClipboard.calls.mostRecent().args[0]).toContain('3,\'puma\',\'9\''); }); describe('when the user can edit the grid', function () { it('enables the paste row button', function () { copyData.apply(_.extend({can_edit: true}, sqlEditor)); expect($('#btn-paste-row').prop('disabled')).toBe(false); }); }); }); describe('when a column is selected', function () { beforeEach(function () { var firstDataColumn = RangeSelectionHelper.rangeForColumn(grid, 1); grid.getSelectionModel().setSelectedRanges([firstDataColumn]); }); it('copies text to the clipboard', function () { spyOn(clipboard, 'copyTextToClipboard'); copyData.apply(sqlEditor); expect(clipboard.copyTextToClipboard).toHaveBeenCalled(); var copyArg = clipboard.copyTextToClipboard.calls.mostRecent().args[0]; var rowStrings = copyArg.split('\n'); expect(rowStrings[0]).toBe('1'); expect(rowStrings[1]).toBe('2'); expect(rowStrings[2]).toBe('3'); }); it('sets copied_rows to empty', function () { copyData.apply(sqlEditor); expect(sqlEditor.copied_rows.length).toBe(0); }); describe('when the user can edit the grid', function () { beforeEach(function () { copyData.apply(_.extend({can_edit: true}, sqlEditor)); }); it('disables the paste row button', function () { expect($('#btn-paste-row').prop('disabled')).toBe(true); }); }); }); });