@cbinsights/react-d3-graph
Version:
React component to build interactive and configurable graphs with d3 effortlessly
98 lines (72 loc) • 3.2 kB
JavaScript
import React from 'react';
import renderer from 'react-test-renderer';
import Graph from '../../../src/components/graph/Graph';
import graphMock from './graph.mock.js';
describe('Graph Component', () => {
let that = {};
that.nodeColor = 'red';
that.highlightColor = 'blue';
that.svgSize = 600;
that.highlightOpacity = 0.1;
that.config = {
height: that.svgSize,
width: that.svgSize,
nodeHighlightBehavior: true,
highlightOpacity: that.highlightOpacity,
staticGraph: true,
node: {
color: that.nodeColor,
highlightColor: that.highlightColor,
size: 100
},
link: {
highlightColor: that.highlightColor
}
};
that.mouseOverNodeCallback = jest.fn();
beforeEach(() => {
that.graph = renderer.create(
<Graph id="graphId" data={graphMock} config={that.config} onMouseOverNode={that.mouseOverNodeCallback} />
);
that.tree = that.graph.toJSON();
});
describe('when onMouseOverNode is called', () => {
const nodeOffset = 1;
const nodeAdjOffset = 2;
const nodeNotAdjOffset = 10;
test('should call mouseOverNode callback', () => {
const linksNodes = that.tree.children[0].children[0].children;
const node = linksNodes[linksNodes.length - 1];
node.children[0].props.onMouseOver();
expect(that.mouseOverNodeCallback).toBeCalled();
});
test('node and their adjacent should have opacity equal to 1 and color (fill) equal to that.highlightColor', () => {
let linksNodes = that.tree.children[0].children[0].children;
let node = linksNodes[linksNodes.length - nodeOffset];
node.children[0].props.onMouseOver();
let tree = that.graph.toJSON(); // re-render
linksNodes = tree.children[0].children[0].children;
// Mouse overed node
node = linksNodes[linksNodes.length - nodeOffset];
let props = node.children[0].props;
expect(props.fill).toEqual(that.highlightColor);
expect(props.opacity).toEqual(1);
// Some adjacent node
node = linksNodes[linksNodes.length - nodeAdjOffset];
props = node.children[0].props;
expect(props.fill).toEqual(that.highlightColor);
expect(props.opacity).toEqual(1);
});
test('non selected node and non adjacent should have opacity equal to that.highlightOpacity and color equal to that.nodeColor', () => {
let linksNodes = that.tree.children[0].children[0].children;
let node = linksNodes[linksNodes.length - nodeOffset];
node.children[0].props.onMouseOver();
let tree = that.graph.toJSON(); // re-render
linksNodes = tree.children[0].children[0].children;
node = linksNodes[linksNodes.length - nodeNotAdjOffset];
const props = node.children[0].props;
expect(props.fill).toEqual(that.nodeColor);
expect(props.opacity).toEqual(that.highlightOpacity);
});
});
});