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 } })
}