summaryrefslogtreecommitdiff
path: root/spec/frontend/alerts_settings/utils/mapping_transformations_spec.js
blob: 8a0800457c655c599f036e5946734c0be4a4470f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import {
  getMappingData,
  setFieldsLabels,
  transformForSave,
} from '~/alerts_settings/utils/mapping_transformations';
import alertFields from '../mocks/alert_fields.json';
import parsedMapping from '../mocks/parsed_mapping.json';

describe('Mapping Transformation Utilities', () => {
  const nameField = {
    label: 'Name',
    path: ['alert', 'name'],
    type: 'STRING',
  };
  const dashboardField = {
    label: 'Dashboard Id',
    path: ['alert', 'dashboardId'],
    type: 'STRING',
  };

  describe('getMappingData', () => {
    it('should return mapping data', () => {
      const result = getMappingData(
        alertFields,
        parsedMapping.payloadAlerFields.slice(0, 3),
        parsedMapping.payloadAttributeMappings.slice(0, 3),
      );

      result.forEach((data, index) => {
        expect(data).toEqual(
          expect.objectContaining({
            ...alertFields[index],
            searchTerm: '',
            fallbackSearchTerm: '',
          }),
        );
      });
    });
  });

  describe('transformForSave', () => {
    it('should transform mapped data for save', () => {
      const fieldName = 'title';
      const mockMappingData = [
        {
          name: fieldName,
          mapping: ['alert', 'name'],
          mappingFields: [dashboardField, nameField],
        },
      ];
      const result = transformForSave(mockMappingData);
      const { path, type, label } = nameField;
      expect(result).toEqual([
        { fieldName: fieldName.toUpperCase(), path, type: type.toUpperCase(), label },
      ]);
    });

    it('should return empty array if no mapping provided', () => {
      const fieldName = 'title';
      const mockMappingData = [
        {
          name: fieldName,
          mapping: null,
          mappingFields: [nameField, dashboardField],
        },
      ];
      const result = transformForSave(mockMappingData);
      expect(result).toEqual([]);
    });
  });

  describe('setFieldsLabels', () => {
    const nonNestedFields = [{ label: 'title' }];
    const nonNestedFieldsResult = { displayLabel: 'Title', tooltip: undefined };

    const nestedFields = [
      {
        label: 'field/subfield',
      },
    ];
    const nestedFieldsResult = { displayLabel: '...Subfield', tooltip: 'field.subfield' };

    const nestedArrayFields = [
      {
        label: 'fields[1]/subfield',
      },
    ];

    const nestedArrayFieldsResult = { displayLabel: '...Subfield', tooltip: 'fields[1].subfield' };

    it.each`
      type                     | fields               | result
      ${'not nested field'}    | ${nonNestedFields}   | ${nonNestedFieldsResult}
      ${'nested field'}        | ${nestedFields}      | ${nestedFieldsResult}
      ${'nested inside array'} | ${nestedArrayFields} | ${nestedArrayFieldsResult}
    `('adds correct displayLabel and tooltip for $type', ({ fields, result }) => {
      expect(setFieldsLabels(fields)[0]).toMatchObject(result);
    });
  });
});