import { doesCustomFieldNeedUpdate, getCustomFieldsForUpdate, } from '../../requests/config-as-code-requests/helpers/customFieldUpdateHelper'; import { BOOLEAN_CUSTOM_FIELD_IN_YAML, MOCK_BOOLEAN_CUSTOM_FIELD, MOCK_MULTI_SELECT_CUSTOM_FIELD, MOCK_MULTI_SELECT_CUSTOM_FIELD_2, MOCK_NUMBER_CUSTOM_FIELD, MOCK_OPTION_UUIDS, MOCK_OPTION_UUIDS_2, MOCK_SINGLE_SELECT_CUSTOM_FIELD, MOCK_SINGLE_SELECT_CUSTOM_FIELD_2, MOCK_TEXT_CUSTOM_FIELD, MOCK_USER_CUSTOM_FIELD, MULTI_SELECT_CUSTOM_FIELD_IN_YAML, MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, NUMBER_CUSTOM_FIELD_IN_YAML, SINGLE_SELECT_CUSTOM_FIELD_IN_YAML, SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, TEXT_CUSTOM_FIELD_IN_YAML, USER_CUSTOM_FIELD_IN_YAML, } from '../fixtures/mocks'; describe('customFieldUpdateHelper', () => { describe('getCustomFieldsForUpdate', () => { it('returns empty array when no custom fields in yaml', () => { expect( getCustomFieldsForUpdate( [], [ MOCK_TEXT_CUSTOM_FIELD, MOCK_NUMBER_CUSTOM_FIELD, MOCK_BOOLEAN_CUSTOM_FIELD, ], ), ).toEqual([]); }); it('returns custom fields in update format', () => { expect( getCustomFieldsForUpdate( [ TEXT_CUSTOM_FIELD_IN_YAML, NUMBER_CUSTOM_FIELD_IN_YAML, BOOLEAN_CUSTOM_FIELD_IN_YAML, ], [ MOCK_TEXT_CUSTOM_FIELD, MOCK_NUMBER_CUSTOM_FIELD, MOCK_BOOLEAN_CUSTOM_FIELD, ], ), ).toEqual([ { definitionId: MOCK_BOOLEAN_CUSTOM_FIELD.definition.id, value: BOOLEAN_CUSTOM_FIELD_IN_YAML.value, type: BOOLEAN_CUSTOM_FIELD_IN_YAML.type, }, ]); }); }); describe('doesCustomFieldNeedUpdate', () => { const testCases = [ { description: 'text custom field with different value', yamlField: { ...TEXT_CUSTOM_FIELD_IN_YAML, value: 'New Value' }, componentFields: [MOCK_TEXT_CUSTOM_FIELD], expectedResult: true, }, { description: 'text custom field with same value', yamlField: TEXT_CUSTOM_FIELD_IN_YAML, componentFields: [MOCK_TEXT_CUSTOM_FIELD], expectedResult: false, }, { description: 'number custom field with different value', yamlField: { ...NUMBER_CUSTOM_FIELD_IN_YAML, value: 43 }, componentFields: [MOCK_NUMBER_CUSTOM_FIELD], expectedResult: true, }, { description: 'number custom field with same value', yamlField: NUMBER_CUSTOM_FIELD_IN_YAML, componentFields: [MOCK_NUMBER_CUSTOM_FIELD], expectedResult: false, }, { description: 'boolean custom field with different value', yamlField: BOOLEAN_CUSTOM_FIELD_IN_YAML, componentFields: [MOCK_BOOLEAN_CUSTOM_FIELD], expectedResult: true, }, { description: 'boolean custom field with same value', yamlField: { ...BOOLEAN_CUSTOM_FIELD_IN_YAML, value: !BOOLEAN_CUSTOM_FIELD_IN_YAML.value, }, componentFields: [MOCK_BOOLEAN_CUSTOM_FIELD], expectedResult: false, }, { description: 'user custom field with different value', yamlField: { ...USER_CUSTOM_FIELD_IN_YAML, value: 'ari:cloud:identity::user/5cee8d75e08e8b0f2a6369a1', }, componentFields: [MOCK_USER_CUSTOM_FIELD], expectedResult: true, }, { description: 'single select custom field with different value', yamlField: { ...SINGLE_SELECT_CUSTOM_FIELD_IN_YAML, value: MOCK_OPTION_UUIDS[1], }, componentFields: [MOCK_SINGLE_SELECT_CUSTOM_FIELD], expectedResult: true, }, { description: 'single select custom field with same value', yamlField: SINGLE_SELECT_CUSTOM_FIELD_IN_YAML, componentFields: [MOCK_SINGLE_SELECT_CUSTOM_FIELD], expectedResult: false, }, { description: 'single select custom field with different display value', yamlField: SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, componentFields: [MOCK_SINGLE_SELECT_CUSTOM_FIELD_2], expectedResult: true, }, { description: 'single select custom field with same display value', yamlField: { ...SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, displayValue: MOCK_OPTION_UUIDS_2[0], }, componentFields: [MOCK_SINGLE_SELECT_CUSTOM_FIELD_2], expectedResult: false, }, { description: 'multi select custom field with same value', yamlField: MULTI_SELECT_CUSTOM_FIELD_IN_YAML, componentFields: [MOCK_MULTI_SELECT_CUSTOM_FIELD], expectedResult: false, }, { description: 'multi select custom field with different display value', yamlField: { ...MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, displayValue: MOCK_OPTION_UUIDS_2.slice(0, 2), }, componentFields: [MOCK_MULTI_SELECT_CUSTOM_FIELD_2], expectedResult: true, }, { description: 'multi select custom field with same display value', yamlField: { ...MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, displayValue: [MOCK_OPTION_UUIDS_2[2]], }, componentFields: [MOCK_MULTI_SELECT_CUSTOM_FIELD_2], expectedResult: false, }, ]; describe.each(testCases)( 'Test case %#', ({ description, yamlField, componentFields, expectedResult }) => { test(`should return ${expectedResult} when ${description}`, () => { expect(doesCustomFieldNeedUpdate(yamlField, componentFields)).toBe( expectedResult, ); }); }, ); }); });