debian-mirror-gitlab/spec/frontend/alerts_settings/utils/mapping_transformations_spec.js
2021-06-08 01:23:25 +05:30

100 lines
2.9 KiB
JavaScript

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