fixed-react-data-grid-custom
Version:
Excel-like grid component built with React, with editors, keyboard navigation, copy & paste, and the like
334 lines (280 loc) • 11.5 kB
JavaScript
import React from 'react';
import { canEdit } from '../ColumnUtils';
import ReactDOM from 'react-dom';
const cloneElement = React.cloneElement;
const render = function(element, mountPoint) {
const mount = mountPoint || document.createElement('div');
const instance = ReactDOM.render(element, mount);
if (!instance.renderWithProps) {
instance.renderWithProps = function(newProps) {
return render(
cloneElement(element, newProps), mount);
};
}
return instance;
};
describe('ColumnUtils tests', () => {
let testProps;
beforeEach(() => {
testProps = {
col: {
editable: true,
editor: {},
filterable: true,
formatOptions: '',
formula: '',
getRowMetaData: undefined,
key: 'PlacementType',
left: 460,
name: 'Adserver Placement Type',
options: [
'Tracking',
'Display'
],
required: false,
resizable: true,
width: 150
},
rowData: {
CostModel: 'CPM',
Dimensions: '468x60',
EndDate: '17 Apr 16',
ExternalSiteName: 'Crimtan',
FloodlightActivityId: null,
FloodlightActivityName: null,
FormatAdditionalInfo: '',
FormatBasicDescription: 'Banner - Standard (468x60)',
InactivePlacementId: 'False',
NumberOfUnits: '147223',
PackageId: '522140',
PackageName: 'BannerFull (468x60), Leaderboard (728x90), Mpu (300x250)',
PlacementId: '11212201702442',
PlacementType: 'Display',
RowState: 0,
Section: 'Run of Site',
SentToAdserver: 'True',
StartDate: '14 Mar 16',
SupplierId: '20966',
SupplierName: 'CrimTan',
TotalCost: '0',
UnitCost: '0',
adServingFormat: 'VAST',
additionalPlacementInfo: '1',
addtlUnitDimensions: '15s',
deviceType: 'D',
executionId: '502859',
isSiteMatched: 'True',
os: 'IOS',
placementName: 'CrimTan>>RunofSite>>468x60>>15s>> >>D>>CPM>>AUT>>W>>IOS>>VAST>> >>1',
targetAudienceType: 'AUT',
techType: 'Serving',
webOrApp: 'W'
},
enableCellSelect: true
};
});
describe('canEdit tests', () => {
describe('canEdit tests using undefineds', () => {
it('CanEdit returns true when col.editable is undefined but col.editor is defined and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = undefined;
testProps.col.editor = {};
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editor).not.toBe(undefined);
expect(testProps.col.editable).toBe(undefined);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(true);
});
it('CanEdit returns false when col.editable is undefined, col.editor is undefined and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = undefined;
testProps.col.editor = undefined;
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editor).toBe(undefined);
expect(testProps.col.editable).toBe(undefined);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is true and enableCellSelect is undefined', () => {
// Arrange
testProps.col.editable = true;
testProps.enableCellSelect = undefined;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editable).toBe(true);
expect(testProps.enableCellSelect).toBe(undefined);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is undefined and enableCellSelect is undefined', () => {
// Arrange
testProps.col.editable = undefined;
testProps.enableCellSelect = undefined;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editable).toBe(undefined);
expect(testProps.enableCellSelect).toBe(undefined);
expect(result).toBe(false);
});
});
describe('canEdit tests using nulls', () => {
it('CanEdit returns true when col.editable is null but col.editor is defined and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = null;
testProps.col.editor = {};
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editor).not.toBe(null);
expect(testProps.col.editable).toBe(null);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(true);
});
it('CanEdit returns false when col.editable is null, col.editor is null and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = null;
testProps.col.editor = null;
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editor).toBe(null);
expect(testProps.col.editable).toBe(null);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is true and enableCellSelect is null', () => {
// Arrange
testProps.col.editable = true;
testProps.enableCellSelect = null;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editable).toBe(true);
expect(testProps.enableCellSelect).toBe(null);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is null and enableCellSelect is null', () => {
// Arrange
testProps.col.editable = null;
testProps.enableCellSelect = null;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(testProps.col.editable).toBe(null);
expect(testProps.enableCellSelect).toBe(null);
expect(result).toBe(false);
});
});
describe('canEdit tests using booleans', () => {
it('CanEdit returns true when col.editable is true and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = true;
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('boolean');
expect(testProps.col.editable).toBe(true);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(true);
});
it('CanEdit returns false when col.editable is false and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = false;
testProps.enableCellSelect = true;
testProps.col.editor = undefined;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('boolean');
expect(testProps.col.editable).toBe(false);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is true and enableCellSelect is false', () => {
// Arrange
testProps.col.editable = true;
testProps.enableCellSelect = false;
testProps.col.editor = undefined;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('boolean');
expect(testProps.col.editable).toBe(true);
expect(testProps.enableCellSelect).toBe(false);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is false and enableCellSelect is false', () => {
// Arrange
testProps.col.editable = false;
testProps.enableCellSelect = false;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('boolean');
expect(testProps.col.editable).toBe(false);
expect(testProps.enableCellSelect).toBe(false);
expect(result).toBe(false);
});
});
describe('canEdit tests with col.editable as a function', () => {
it('CanEdit returns true when col.editable is a function which returns true and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = () => { return true; };
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('function');
expect(testProps.col.editable()).toBe(true);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(true);
});
it('CanEdit returns false when col.editable is a function which returns false and enableCellSelect is true', () => {
// Arrange
testProps.col.editable = () => { return false; };
testProps.enableCellSelect = true;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('function');
expect(testProps.col.editable()).toBe(false);
expect(testProps.enableCellSelect).toBe(true);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is a function which returns true and enableCellSelect is false', () => {
// Arrange
testProps.col.editable = () => { return true; };
testProps.enableCellSelect = false;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('function');
expect(testProps.col.editable()).toBe(true);
expect(testProps.enableCellSelect).toBe(false);
expect(result).toBe(false);
});
it('CanEdit returns false when col.editable is a function which returns false and enableCellSelect is false', () => {
// Arrange
testProps.col.editable = () => { return false; };
testProps.enableCellSelect = false;
// Act
const result = canEdit(testProps.col, testProps.RowData, testProps.enableCellSelect);
// Assert
expect(typeof(testProps.col.editable)).toBe('function');
expect(testProps.col.editable()).toBe(false);
expect(testProps.enableCellSelect).toBe(false);
expect(result).toBe(false);
});
});
});
});