import { normalizeHTML } from './normalizeHTML'; import { SankeyChartData, NodeProperties, Relation, Magnitude, SankeyChartDataOptions, Node, IncludeKind } from '../src'; import { node } from 'webpack'; 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" } } ], magnitudes: [ { nodes: [{ kind: "consumer", name: "Consumer 1" }, { kind: "product", name: "Product 3" }, { kind: "proxy", name: "Proxy B" }], value: 20000 }, { nodes: [{ kind: "consumer", name: "Consumer 4" }, { kind: "product", name: "Product 3" }, { kind: "proxy", name: "Proxy B" }], value: 200000 }, { nodes: [{ kind: "consumer", name: "Consumer 4" }, { kind: "product", name: "Product 3" }, { kind: "proxy", name: "Proxy A" }], value: 2000000 } ] }; 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); }); }); }); const mapKindAndName = function (nodes: NodeProperties[]): Node[] { return nodes.map(node => { return { name: node.name, kind: node.kind } }) }