123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- import { ArrayVector, createTheme, DataFrame, FieldType, MutableDataFrame } from '@grafana/data';
- import {
- getEdgeFields,
- getNodeFields,
- getNodeGraphDataFrames,
- makeEdgesDataFrame,
- makeNodesDataFrame,
- processNodes,
- } from './utils';
- describe('processNodes', () => {
- const theme = createTheme();
- it('handles empty args', async () => {
- expect(processNodes(undefined, undefined, theme)).toEqual({ nodes: [], edges: [] });
- });
- it('returns proper nodes and edges', async () => {
- const { nodes, edges, legend } = processNodes(
- makeNodesDataFrame(3),
- makeEdgesDataFrame([
- [0, 1],
- [0, 2],
- [1, 2],
- ]),
- theme
- );
- const colorField = {
- config: {
- color: {
- mode: 'continuous-GrYlRd',
- },
- },
- index: 7,
- name: 'color',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- };
- expect(nodes).toEqual([
- {
- arcSections: [
- {
- config: {
- color: {
- fixedColor: 'green',
- },
- },
- name: 'arc__success',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- {
- config: {
- color: {
- fixedColor: 'red',
- },
- },
- name: 'arc__errors',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- ],
- color: colorField,
- dataFrameRowIndex: 0,
- id: '0',
- incoming: 0,
- mainStat: {
- config: {},
- index: 3,
- name: 'mainstat',
- type: 'number',
- values: new ArrayVector([0.1, 0.1, 0.1]),
- },
- secondaryStat: {
- config: {},
- index: 4,
- name: 'secondarystat',
- type: 'number',
- values: new ArrayVector([2, 2, 2]),
- },
- subTitle: 'service',
- title: 'service:0',
- },
- {
- arcSections: [
- {
- config: {
- color: {
- fixedColor: 'green',
- },
- },
- name: 'arc__success',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- {
- config: {
- color: {
- fixedColor: 'red',
- },
- },
- name: 'arc__errors',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- ],
- color: colorField,
- dataFrameRowIndex: 1,
- id: '1',
- incoming: 1,
- mainStat: {
- config: {},
- index: 3,
- name: 'mainstat',
- type: 'number',
- values: new ArrayVector([0.1, 0.1, 0.1]),
- },
- secondaryStat: {
- config: {},
- index: 4,
- name: 'secondarystat',
- type: 'number',
- values: new ArrayVector([2, 2, 2]),
- },
- subTitle: 'service',
- title: 'service:1',
- },
- {
- arcSections: [
- {
- config: {
- color: {
- fixedColor: 'green',
- },
- },
- name: 'arc__success',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- {
- config: {
- color: {
- fixedColor: 'red',
- },
- },
- name: 'arc__errors',
- type: 'number',
- values: new ArrayVector([0.5, 0.5, 0.5]),
- },
- ],
- color: colorField,
- dataFrameRowIndex: 2,
- id: '2',
- incoming: 2,
- mainStat: {
- config: {},
- index: 3,
- name: 'mainstat',
- type: 'number',
- values: new ArrayVector([0.1, 0.1, 0.1]),
- },
- secondaryStat: {
- config: {},
- index: 4,
- name: 'secondarystat',
- type: 'number',
- values: new ArrayVector([2, 2, 2]),
- },
- subTitle: 'service',
- title: 'service:2',
- },
- ]);
- expect(edges).toEqual([
- {
- dataFrameRowIndex: 0,
- id: '0--1',
- mainStat: '',
- secondaryStat: '',
- source: '0',
- target: '1',
- },
- {
- dataFrameRowIndex: 1,
- id: '0--2',
- mainStat: '',
- secondaryStat: '',
- source: '0',
- target: '2',
- },
- {
- dataFrameRowIndex: 2,
- id: '1--2',
- mainStat: '',
- secondaryStat: '',
- source: '1',
- target: '2',
- },
- ]);
- expect(legend).toEqual([
- {
- color: 'green',
- name: 'arc__success',
- },
- {
- color: 'red',
- name: 'arc__errors',
- },
- ]);
- });
- it('detects dataframes correctly', () => {
- const validFrames = [
- new MutableDataFrame({
- refId: 'hasPreferredVisualisationType',
- fields: [],
- meta: {
- preferredVisualisationType: 'nodeGraph',
- },
- }),
- new MutableDataFrame({
- refId: 'hasName',
- fields: [],
- name: 'nodes',
- }),
- new MutableDataFrame({
- refId: 'nodes', // hasRefId
- fields: [],
- }),
- new MutableDataFrame({
- refId: 'hasValidNodesShape',
- fields: [{ name: 'id', type: FieldType.string }],
- }),
- new MutableDataFrame({
- refId: 'hasValidEdgesShape',
- fields: [
- { name: 'id', type: FieldType.string },
- { name: 'source', type: FieldType.string },
- { name: 'target', type: FieldType.string },
- ],
- }),
- ];
- const invalidFrames = [
- new MutableDataFrame({
- refId: 'invalidData',
- fields: [],
- }),
- ];
- const frames = [...validFrames, ...invalidFrames];
- const nodeGraphFrames = getNodeGraphDataFrames(frames as DataFrame[]);
- expect(nodeGraphFrames.length).toBe(5);
- expect(nodeGraphFrames).toEqual(validFrames);
- });
- it('getting fields is case insensitive', () => {
- const nodeFrame = new MutableDataFrame({
- refId: 'nodes',
- fields: [
- { name: 'id', type: FieldType.string, values: ['id'] },
- { name: 'title', type: FieldType.string, values: ['title'] },
- { name: 'SUBTITLE', type: FieldType.string, values: ['subTitle'] },
- { name: 'mainstat', type: FieldType.string, values: ['mainStat'] },
- { name: 'seconDarysTat', type: FieldType.string, values: ['secondaryStat'] },
- ],
- });
- const nodeFields = getNodeFields(nodeFrame);
- expect(nodeFields.id).toBeDefined();
- expect(nodeFields.title).toBeDefined();
- expect(nodeFields.subTitle).toBeDefined();
- expect(nodeFields.mainStat).toBeDefined();
- expect(nodeFields.secondaryStat).toBeDefined();
- const edgeFrame = new MutableDataFrame({
- refId: 'nodes',
- fields: [
- { name: 'id', type: FieldType.string, values: ['id'] },
- { name: 'source', type: FieldType.string, values: ['title'] },
- { name: 'TARGET', type: FieldType.string, values: ['subTitle'] },
- { name: 'mainstat', type: FieldType.string, values: ['mainStat'] },
- { name: 'secondarystat', type: FieldType.string, values: ['secondaryStat'] },
- ],
- });
- const edgeFields = getEdgeFields(edgeFrame);
- expect(edgeFields.id).toBeDefined();
- expect(edgeFields.source).toBeDefined();
- expect(edgeFields.target).toBeDefined();
- expect(edgeFields.mainStat).toBeDefined();
- expect(edgeFields.secondaryStat).toBeDefined();
- });
- });
|