import { normalizeHTML } from './normalizeHTML';
import { SankeyChartData, NodeProperties, Relation, SankeyChartDataOptions, Node, IncludeKind } from '../src';
test('createSankeyChart should work correctly', () => {
const element = document.createElement('div');
element.appendChild(document.createElement('div'));
const data = { key: 'value' };
//SankeyChartData(element, data);
const html = normalizeHTML(element.innerHTML);
expect(element.innerHTML).toContain(html);
});
test('SankeyChart should be defined', () => {
expect(SankeyChartData).toBeDefined();
});
const mockData = {
name: 'Test Data',
color: 'blue',
nodes: [
{ kind: 'type1', name: 'Node1' },
{ kind: 'type2', name: 'Node2' }
],
relations: [
{ source: { kind: 'type1', name: 'Node1' }, target: { kind: 'type2', name: 'Node2' } }
]
};
const mockOptions: SankeyChartDataOptions = {
relationDefaultWidth: 15,
kinds: [{ name: 'type1' }, { name: 'type2' }],
};
describe('SankeyChartData', () => {
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockOptions);
});
test('should initialize correctly', () => {
expect(sankeyChartData.originalData).toMatchObject(mockData);
expect(sankeyChartData.options).toMatchObject(mockOptions);
expect(sankeyChartData.originalData.nodes.length).toEqual(2);
expect(sankeyChartData.getNodes().length).toEqual(2);
expect(sankeyChartData.getKinds().length).toEqual(2);
sankeyChartData.selectNode(mockData.nodes[0]);
expect(sankeyChartData.nodes.length).toEqual(2);
});
test('should set options correctly', () => {
const newOptions: SankeyChartDataOptions = {
relationDefaultWidth: 20,
kinds: [{ name: 'type3' }]
};
sankeyChartData.setOptions(newOptions);
expect(sankeyChartData.options.relationDefaultWidth).toBe(20);
expect(sankeyChartData.options.kinds).toEqual([{ name: 'type3' }]);
});
test('should append data correctly', () => {
const additionalData = {
nodes: [{ kind: 'type3', name: 'Node3' }],
relations: [
{ source: { kind: 'type2', name: 'Node2' }, target: { kind: 'type3', name: 'Node3' } }
]
};
sankeyChartData.appendData(additionalData);
expect(sankeyChartData.originalData.nodes).toHaveLength(3);
expect(sankeyChartData.originalData.relations).toHaveLength(2);
});
test('should get nodes by kind', () => {
const x = sankeyChartData.getNodesByKind('type1');
expect(sankeyChartData.getNodesByKind('type1').length).toEqual(1);
sankeyChartData.appendData({ nodes: mockData.nodes, relations: mockData.relations });
//expect(sankeyChartData.getNodesByKind('type1')).toEqual([{ kind: 'type1', name: 'Node1' }]);
});
test('should select node correctly', () => {
interface SelectedNode {
kind: string;
name: string;
}
sankeyChartData.appendData({ nodes: mockData.nodes, relations: mockData.relations });
const node: NodeProperties = { kind: 'type1', name: 'Node1' };
sankeyChartData.selectNode(node);
expect(sankeyChartData.getSelectedNode()).toEqual(expect.objectContaining(node));
});
test('should throw error if node kind or name is empty', () => {
expect(() => {
sankeyChartData.selectNode({ kind: '', name: 'Node1' });
}).toThrow('Node must have kind and name');
expect(() => {
sankeyChartData.selectNode({ kind: 'type1', name: '' });
}).toThrow('Node must have kind and name');
});
test('should filter nodes correctly based on relations', () => {
const nodeA: Node = { kind: 'typeA', name: 'A' };
const nodeB: Node = { kind: 'typeB', name: 'B' };
const nodeC: Node = { kind: 'typeC', name: 'C' };
const nodeD: Node = { kind: 'typeD', name: 'D' };
const relations: Relation[] = [
{ source: nodeA, target: nodeB },
{ source: nodeB, target: nodeC }
];
sankeyChartData.appendData({ nodes: [nodeA, nodeB, nodeC, nodeD], relations });
expect(sankeyChartData.filterNodes(relations)).toEqual([nodeA, nodeB, nodeC]);
});
});
describe('init SankeyChartData', () => {
const mockData = {
"name": "MockData",
"nodes": [
{ "kind": "product", "name": "Product 1 with a longer description", "tags": ["A", "B", "C", "X"] },
{ "kind": "product", "name": "Product 2", "tags": ["F"] },
{ "kind": "product", "name": "Product 3", "tags": ["A", "3"] },
{ "kind": "product", "name": "Product 4" },
{ "kind": "product", "name": "ABC" },
{ "kind": "product", "name": "Product 5", "tags": ["F", "5"] },
{ "kind": "product", "name": "Product 44", "tags": ["F", "4"] },
{ "kind": "product", "name": "Product T" },
{ "kind": "consumer", "name": "Consumer 1", "tags": ["A", "B"] },
{ "kind": "consumer", "name": "Consumer 2", "tags": ["X"] },
{ "kind": "consumer", "name": "Consumer 3" },
{ "kind": "consumer", "name": "Consumer 4", "tags": ["F"] },
{ "kind": "consumer", "name": "Consumer 5" },
{ "kind": "consumer", "name": "Consumer 5X" },
{ "kind": "consumer", "name": "ABC" },
{ "kind": "proxy", "name": "Proxy A", "tags": ["X"] },
{ "kind": "proxy", "name": "Proxy B", "tags": ["Y"] },
{ "kind": "proxy", "name": "Proxy C" },
{ "kind": "proxy", "name": "Proxy D" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 1 with a longer description" }, "analytics": { "traffic": 1000000, "errors": 203555, "environment": "NonPROD" } },
{ "source": { "kind": "consumer", "name": "Consumer 5" }, "target": { "kind": "product", "name": "Product 1 with a longer description" }, "analytics": { "traffic": 0, "errors": 1000, "environment": "nonProd" } },
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 2" } },
{ "source": { "kind": "consumer", "name": "ABC" }, "target": { "kind": "product", "name": "ABC" } },
{ "source": { "kind": "consumer", "name": "Consumer 5" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "consumer", "name": "Consumer 5" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "consumer", "name": "Consumer 5" }, "target": { "kind": "product", "name": "Product 2" } },
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 3" }, "analytics": { "traffic": 100000000, "errors": 1000, "environment": "NonPROD" } },
{ "source": { "kind": "consumer", "name": "Consumer 4" }, "target": { "kind": "product", "name": "Product 3" }, "analytics": { "traffic": 450000, "errors": 1000 } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy B" }, "analytics": { "traffic": 10000000, "errors": 400, "consumers": { "Consumer 4": { "traffic": 40000, "errors": 200 } } } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy A" }, "analytics": { "traffic": 1000000, "errors": 0, "consumers": { "Consumer 4": { "traffic": 5000, "errors": 200 } } } },
{ "source": { "kind": "consumer", "name": "Consumer 2" }, "target": { "kind": "product", "name": "Product 4" } },
{ "source": { "kind": "product", "name": "Product 4" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "consumer", "name": "Consumer 4" }, "target": { "kind": "product", "name": "Product 5" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy A" }, "analytics": { "traffic": 10, "errors": 1 } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy B" }, "analytics": { "traffic": 1000, "errors": 22 } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy C" }, "analytics": { "traffic": 10000, "errors": 333 } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "product", "name": "Product 44" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "consumer", "name": "Consumer 5X" }, "target": { "kind": "product", "name": "Product T" } },
{ "source": { "kind": "consumer", "name": "Consumer 5" }, "target": { "kind": "consumer", "name": "Consumer 5X" } }
]
};
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
tagColorMap: {
"A": "#ff0000",
"X": "#00ff00",
"F": "#ff00ff"
},
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true
};
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
});
test('sankey - initial data', () => {
expect(sankeyChartData.getKinds().length).toBe(3);
});
test('sankey - selectAll() ', () => {
expect(sankeyChartData.selectedNode).toBeUndefined();
});
test('sankey - selectNode(): select Product 5', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
chartDataA.selectNode({ kind: 'product', name: 'Product 5' })
expect(chartDataA.selectedNode).toStrictEqual({
kind: 'product', name: 'Product 5', "tags": [
"F",
"5"
],
cardinality: {
"sameKindCount": 0,
"sourceCount": 4,
"targetCount": 1
},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
color: '#ff00ff'
});
expect(chartDataA.getKinds().length).toBe(3);
});
test('sankey - selectNode(): not found Product xxxx', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
chartDataA.selectNode({ kind: 'product', name: 'Product xxxx' })
expect(chartDataA.selectedNode).toBeUndefined();
});
test('sankey - selectNode(): criteria is invalid', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
expect(chartDataA.getKinds().length).toBe(3);
expect(() => chartDataA.selectNode({ kind: '', name: 'Product xxxx' })).toThrow('Node must have kind and name');
expect(chartDataA.getKinds().length).toBe(3);
});
test('sankey - searchByName(): search Product 5 and get one', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
const result = chartDataA.searchByName({ kind: 'product', name: 'Product 5' })
expect(result).toStrictEqual([{
kind: 'product', name: 'Product 5', "tags": [
"F",
"5"
],
cardinality: {
"sameKindCount": 0,
"sourceCount": 4,
"targetCount": 1
},
color: '#ff00ff'
}]);
});
test('sankey - searchByName(): search Product 4 and get multiple', () => {
const chartDataA = new SankeyChartData(mockData, mockOptions);
const result = chartDataA.searchByName({ kind: 'product', name: 'Product 4' });
console.log(result);
expect(result).toStrictEqual(
[{
kind: "product", name: "Product 4", cardinality: {
"sourceCount": 1,
"targetCount": 1,
sameKindCount: 0
},
color: "gray"
},
{
kind: "product", name: "Product 44", tags: ["F", "4"], cardinality: {
"sameKindCount": 0,
"sourceCount": 1,
"targetCount": 0
},
color: '#ff00ff'
}]);
});
test('sankey - selectNode(): criteria is invalid', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
expect(chartDataA.getKinds().length).toBe(3);
expect(chartDataA.getNodes().length).toBe(19);
expect(() => chartDataA.selectNode({ kind: '', name: 'Product xxxx' })).toThrow('Node must have kind and name');
expect(chartDataA.getNodes().length).toBe(19);
});
test('sankey - selectNode(): criteria is invalid', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
expect(chartDataA.getKinds().length).toBe(3);
expect(chartDataA.getNodes().length).toBe(19);
expect(() => chartDataA.selectNode({ kind: 'product', name: '' })).toThrow('Node must have kind and name');
expect(chartDataA.getNodes().length).toBe(19);
});
test('sankey - selectNode(): Product 4', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
const result = chartDataA.selectNode({ kind: 'product', name: 'Product 4' });
expect(result).toStrictEqual(
{
kind: "product", name: "Product 4",
"color": "gray",
cardinality: {
"sourceCount": 1,
"targetCount": 1,
sameKindCount: 0
},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
});
});
test('sankey - selectNode(): Consumer 2', () => {
const chartDataA = new SankeyChartData(JSON.parse(JSON.stringify(mockData)), mockOptions);
const result = chartDataA.selectNode({ "kind": "consumer", "name": "Consumer 2" });
expect(result).toStrictEqual(
{
kind: "consumer", name: "Consumer 2",
"color": "#00ff00",
cardinality: {
"sourceCount": 1,
"targetCount": 0,
sameKindCount: 0
},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
"tags": [
"X"
]
});
});
});
describe('SankeyChartData set options', () => {
const mockData = {
"name": "MockData",
"nodes": [
{ "kind": "product", "name": "Product 1" },
{ "kind": "product", "name": "Product 2" },
{ "kind": "product", "name": "Product 3" },
{ "kind": "product", "name": "Product 4" },
{ "kind": "product", "name": "Product 5" },
{ "kind": "consumer", "name": "Consumer 1" },
{ "kind": "consumer", "name": "Consumer 2" },
{ "kind": "consumer", "name": "Consumer 3" },
{ "kind": "consumer", "name": "Consumer 4" },
{ "kind": "proxy", "name": "Proxy A" },
{ "kind": "proxy", "name": "Proxy B" },
{ "kind": "proxy", "name": "Proxy C" },
{ "kind": "proxy", "name": "Proxy D" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "consumer", "name": "Consumer 4" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy C" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy D" } }
]
};
const mockRootOptions: SankeyChartDataOptions = {
defaultColor: "blue",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true
};
describe('set options A - relatedSourceKinds at proxy, showRelatedKinds', () => {
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true
};
sankeyChartData.setOptions(mockOptions);
});
test('set options A - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options A - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "gray",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options A - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('set options B - relatedSourceKinds at proxy, showRelatedKinds=false, relatedSourceKinds=Products', () => {
let sankeyChartData: SankeyChartData;
const mockData = {
"name": "MockData",
"nodes": [
{ "kind": "product", "name": "Product 1" },
{ "kind": "product", "name": "Product 2" },
{ "kind": "product", "name": "Product 3" },
{ "kind": "product", "name": "Product 4" },
{ "kind": "product", "name": "Product 5" },
{ "kind": "consumer", "name": "Consumer 1" },
{ "kind": "consumer", "name": "Consumer 2" },
{ "kind": "consumer", "name": "Consumer 3" },
{ "kind": "consumer", "name": "Consumer 4" },
{ "kind": "proxy", "name": "Proxy A" },
{ "kind": "proxy", "name": "Proxy B" },
{ "kind": "proxy", "name": "Proxy C" },
{ "kind": "proxy", "name": "Proxy D" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "consumer", "name": "Consumer 4" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy C" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy D" } }
]
};
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: false
};
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
sankeyChartData.setOptions(mockOptions);
});
test('set options B - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options B - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
console.log(JSON.stringify(result));
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "gray",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options B - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
console.log(JSON.stringify(result));
const x = JSON.stringify(result);
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('set options C - relatedSourceKinds at proxy, showRelatedKinds=false', () => {
let sankeyChartData: SankeyChartData;
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: false
};
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
sankeyChartData.setOptions(mockOptions);
});
test('set options C - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options C - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
console.log(JSON.stringify(result));
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "gray",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options C - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
console.log(JSON.stringify(result));
const x = JSON.stringify(result);
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('set options D - relatedSourceKinds at proxy, showRelatedKinds', () => {
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products', includeAlternative: IncludeKind.WITH_SAME_TARGET },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true
};
sankeyChartData.setOptions(mockOptions);
});
test('set options D - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options D - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "gray",
hasRelatedSourceOfOtherKinds: true,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 0}
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 5",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options D - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
});
describe('SankeyChartData set options - dataset B', () => {
const mockData = {
name: "MockData",
"nodes": [
{ kind: "product", name: "Product 1" },
{ kind: "product", name: "Product 2", "tags": ["abc"] },
{ kind: "product", name: "Product 3", color: "pink" },
{ kind: "product", name: "Product 4" },
{ kind: "product", name: "Product 5" },
{ kind: "consumer", name: "Consumer 1" },
{ kind: "consumer", name: "Consumer 2" },
{ kind: "consumer", name: "Consumer 3" },
{ kind: "consumer", name: "Consumer 4", "tags": ["xyz"] },
{ kind: "proxy", name: "Proxy A" },
{ kind: "proxy", name: "Proxy B" },
{ kind: "proxy", name: "Proxy C" },
{ kind: "proxy", name: "Proxy D" }
],
"relations": [
{ source: { kind: "consumer", name: "Consumer 1" }, "target": { kind: "product", name: "Product 3" } },
{ source: { kind: "consumer", name: "Consumer 4" }, "target": { kind: "product", name: "Product 3" } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "proxy", name: "Proxy B" }, analytics: { traffic: 100000, errors: 20 } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "proxy", name: "Proxy A" }, analytics: { traffic: 20000, errors: 20, environment: "nonPROD" } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "product", name: "Product 4" } },
{ source: { kind: "product", name: "Product 4" }, "target": { kind: "proxy", name: "Proxy D" } },
{ source: { kind: "consumer", name: "Consumer 4" }, "target": { kind: "product", name: "Product 4" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy A" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy B" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy C" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy D" } },
{ source: { kind: "product", name: "Product 2" }, "target": { kind: "proxy", name: "Proxy D" } }
]
};
const mockRootOptions: SankeyChartDataOptions = {
defaultColor: "blue",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true,
showSameKindsOnNonSelected: true
};
describe('set options A - relatedSourceKinds at proxy, showRelatedKinds', () => {
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true,
showSameKindsOnNonSelected: true
};
sankeyChartData.setOptions(mockOptions);
});
test('set options A - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options A - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "pink",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 1 },
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}, {
kind: "proxy",
name: "Proxy D"
}];
expect(results).toStrictEqual(nodes);
});
test('set options A - sankey - selectNode(): Product 4', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 4' });
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 4", "color": "gray",
cardinality: { "sourceCount": 1, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: true,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
}, {
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy D",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options A - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('Sort by grouping', () => {
let sankeyChartData: SankeyChartData;
const mockDataToSort = {
name: "MockData",
"nodes": [
{ kind: "product", name: "Product 1" },
{ kind: "product", name: "Product 2", "tags": ["abc"] },
{ kind: "product", name: "Product 3", color: "pink" },
{ kind: "product", name: "Product 4" },
{ kind: "product", name: "Product 5" },
{ kind: "consumer", name: "Consumer 1" },
{ kind: "consumer", name: "Consumer 2" },
{ kind: "consumer", name: "Consumer 3" },
{ kind: "consumer", name: "Consumer 4", "tags": ["xyz"] },
{ kind: "proxy", name: "Proxy A" },
{ kind: "proxy", name: "Proxy B" },
{ kind: "proxy", name: "Proxy C" },
{ kind: "proxy", name: "Proxy D" }
],
"relations": [
{ source: { kind: "consumer", name: "Consumer 1" }, "target": { kind: "product", name: "Product 5" } },
{ source: { kind: "consumer", name: "Consumer 1" }, "target": { kind: "product", name: "Product 3" } },
{ source: { kind: "consumer", name: "Consumer 4" }, "target": { kind: "product", name: "Product 3" } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "proxy", name: "Proxy C" }, analytics: { traffic: 100000, errors: 20 } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "proxy", name: "Proxy D" }, analytics: { traffic: 20000, errors: 20, environment: "nonPROD" } },
{ source: { kind: "product", name: "Product 3" }, "target": { kind: "product", name: "Product 4" } },
{ source: { kind: "product", name: "Product 4" }, "target": { kind: "proxy", name: "Proxy D" } },
{ source: { kind: "consumer", name: "Consumer 4" }, "target": { kind: "product", name: "Product 4" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy A" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy B" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy C" } },
{ source: { kind: "product", name: "Product 5" }, "target": { kind: "proxy", name: "Proxy D" } },
{ source: { kind: "product", name: "Product 2" }, "target": { kind: "proxy", name: "Proxy D" } }
]
};
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: false,
showSameKindsOnNonSelected: true
};
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockDataToSort, mockRootOptions);
sankeyChartData.setOptions(mockOptions);
});
test('set options B - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 2, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 4", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Consumer 1", "kind": "consumer" },
{ "name": "Proxy A", "kind": "proxy" },
{ "name": "Proxy B", "kind": "proxy" },
{ "name": "Proxy C", "kind": "proxy" },
{ "name": "Proxy D", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
const nodesConsumer = mapKindAndName(sankeyChartData.getNodesByKind(mockOptions.kinds[0].name));
expect([
{ "name": "Consumer 1", "kind": "consumer" }]).toStrictEqual(nodesConsumer);
const nodesProduct = mapKindAndName(sankeyChartData.getNodesByKind(mockOptions.kinds[1].name));
expect([
{ "name": "Product 4", "kind": "product" },
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" }]).toStrictEqual(nodesProduct);
const nodesProxy = mapKindAndName(sankeyChartData.getNodesByKind(mockOptions.kinds[2].name));
expect([
{ "name": "Proxy C", "kind": "proxy" },
{ "name": "Proxy D", "kind": "proxy" },
{ "name": "Proxy A", "kind": "proxy" },
{ "name": "Proxy B", "kind": "proxy" }]).toStrictEqual(nodesProxy);
});
});
describe('set options B - relatedSourceKinds at proxy, showRelatedKinds=false, relatedSourceKinds=Products', () => {
let sankeyChartData: SankeyChartData;
const mockData = {
"name": "MockData",
"nodes": [
{ "kind": "product", "name": "Product 1" },
{ "kind": "product", "name": "Product 2" },
{ "kind": "product", "name": "Product 3" },
{ "kind": "product", "name": "Product 4" },
{ "kind": "product", "name": "Product 5" },
{ "kind": "consumer", "name": "Consumer 1" },
{ "kind": "consumer", "name": "Consumer 2" },
{ "kind": "consumer", "name": "Consumer 3" },
{ "kind": "consumer", "name": "Consumer 4" },
{ "kind": "proxy", "name": "Proxy A" },
{ "kind": "proxy", "name": "Proxy B" },
{ "kind": "proxy", "name": "Proxy C" },
{ "kind": "proxy", "name": "Proxy D" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "consumer", "name": "Consumer 4" }, "target": { "kind": "product", "name": "Product 3" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 3" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy A" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy B" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy C" } },
{ "source": { "kind": "product", "name": "Product 5" }, "target": { "kind": "proxy", "name": "Proxy D" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy D" } }
]
};
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: false
};
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
sankeyChartData.setOptions(mockOptions);
});
test('set options B - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options B - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
console.log(JSON.stringify(result));
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "gray",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options B - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
console.log(JSON.stringify(result));
const x = JSON.stringify(result);
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('set options C - relatedSourceKinds at proxy, showRelatedKinds=false', () => {
let sankeyChartData: SankeyChartData;
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products' },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: false
};
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
sankeyChartData.setOptions(mockOptions);
});
test('set options C - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options C - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
console.log(JSON.stringify(result));
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "pink",
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 1 },
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}, {
kind: "proxy",
name: "Proxy D"
}];
expect(results).toStrictEqual(nodes);
});
test('set options C - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
console.log(JSON.stringify(result));
const x = JSON.stringify(result);
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
describe('set options D - relatedSourceKinds at proxy, showRelatedKinds', () => {
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData, mockRootOptions);
const mockOptions: SankeyChartDataOptions = {
defaultColor: "gray",
kinds: [
{ name: 'consumer', title: 'Consumers' },
{ name: 'product', title: 'Products', includeAlternative: IncludeKind.WITH_SAME_TARGET },
{ name: 'proxy', title: 'Proxies' }
],
showRelatedKinds: true
};
sankeyChartData.setOptions(mockOptions);
});
test('set options D - relatedSourceKinds - Consumer 1', () => {
const result = sankeyChartData.selectNode({ kind: 'consumer', name: 'Consumer 1' });
expect(result).toStrictEqual(
{
"kind": "consumer", "name": "Consumer 1", "color": "gray",
"cardinality": { "sourceCount": 1, "targetCount": 0, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
},
{
name: "Consumer 1",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}];
expect(results).toStrictEqual(nodes);
});
test('set options D - sankey - selectNode(): Product 3', () => {
const result = sankeyChartData.selectNode({ kind: 'product', name: 'Product 3' });
expect(result).toStrictEqual(
{
kind: "product", "name": "Product 3", "color": "pink",
hasRelatedSourceOfOtherKinds: true,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
cardinality: { "sourceCount": 2, "targetCount": 2, "sameKindCount": 1 }
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{
name: "Product 3",
kind: "product",
}, {
name: "Product 4",
kind: "product",
}, {
name: "Product 5",
kind: "product",
}, {
name: "Consumer 1",
kind: "consumer",
},
{
name: "Consumer 4",
kind: "consumer",
}, {
name: "Proxy A",
kind: "proxy",
}, {
name: "Proxy B",
kind: "proxy",
}, {
kind: "proxy",
name: "Proxy D"
}];
expect(results).toStrictEqual(nodes);
});
test('set options D - sankey - selectNode(): Proxy A', () => {
const result = sankeyChartData.selectNode({ kind: "proxy", name: "Proxy A" });
expect(result).toStrictEqual(
{
kind: "proxy", name: "Proxy A", "color": "gray",
cardinality: { "sourceCount": 0, "targetCount": 2, "sameKindCount": 0},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true
}
);
const nodes = mapKindAndName(sankeyChartData.getNodes());
console.log(JSON.stringify(mapKindAndName(nodes)));
const results = [
{ "name": "Product 3", "kind": "product" },
{ "name": "Product 5", "kind": "product" },
{ "name": "Proxy A", "kind": "proxy" }];
expect(results).toStrictEqual(nodes);
});
});
});
describe('init SankeyChartData and append data', () => {
const mockData22 = {
"name": "appendData",
"nodes": [
{ "kind": "product", "name": "Product 1" },
{ "kind": "product", "name": "Product 2", "targetCount": 100, "sourceCount": 199 },
{ "kind": "consumer", "name": "Consumer 1" },
{ "kind": "consumer", "name": "Consumer 2" },
{ "kind": "proxy", "name": "Proxy A" },
{ "kind": "proxy", "name": "Proxy B" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 1" } },
{ "source": { "kind": "consumer", "name": "Consumer 1" }, "target": { "kind": "product", "name": "Product 2" } },
{ "source": { "kind": "product", "name": "Product 1" }, "target": { "kind": "proxy", "name": "Proxy A" } }
]
};
const mockDataAppend22 = {
"nodes": [
{ "kind": "product", "name": "Product 2" },
{ "kind": "product", "name": "Product 3" },
{ "kind": "consumer", "name": "Consumer 3" },
{ "kind": "proxy", "name": "Proxy C" },
{ "kind": "proxy", "name": "Proxy D" }
],
"relations": [
{ "source": { "kind": "consumer", "name": "Consumer 3" }, "target": { "kind": "product", "name": "Product 2" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy C" } },
{ "source": { "kind": "product", "name": "Product 2" }, "target": { "kind": "proxy", "name": "Proxy D" } }
]
};
const mockOptions22 = {
relationDefaultWidth: 15,
kinds: [{ name: 'consumer' }, { name: 'product' }, { name: 'proxy' }],
};
let sankeyChartData: SankeyChartData;
beforeEach(() => {
sankeyChartData = new SankeyChartData(mockData22, mockOptions22);
});
test('sankey - appendData() ', () => {
const selectedNode = sankeyChartData.selectNode({ "kind": "product", "name": "Product 2" });
expect(selectedNode).toStrictEqual(
{
kind: "product", name: "Product 2", color: "orange",
cardinality: { sameKindCount: 0,
sourceCount: 199, targetCount: 100},
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
sourceCount: 199, targetCount: 100
}
);
const nodes = sankeyChartData.getNodes();
expect(nodes).toHaveLength(2); // could add place holder
sankeyChartData.appendData(mockDataAppend22, selectedNode);
const nodesAfter = sankeyChartData.getNodes();
expect(nodesAfter).toHaveLength(4);
const resultAfter = sankeyChartData.selectedNode;
expect(resultAfter).toStrictEqual(
{
"kind": "product", "name": "Product 2", "color": "orange",
hasRelatedSourceOfOtherKinds: false,
hasRelatedSourceOfSameKind: false,
hasRelationsOfSameKinds: true,
cardinality: { "sourceCount": 2, "targetCount": 1, "sameKindCount": 0}
}
);
});
});
const mapKindAndName = function (nodes: Node[]): Node[] {
return nodes.map(node => { return { name: node.name, kind: node.kind } })
}