import { CustomFieldType } from '@atlassian/forge-graphql-types'; import { buildCustomFieldToUpdateFormat, getValueFromDisplayValue, mappedCustomFieldsToYamlFormat, } from '../../requests/config-as-code-requests/helpers/buildCustomFields'; 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_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('buildCustomFieldToUpdateFormat', () => { it('builds text customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [TEXT_CUSTOM_FIELD_IN_YAML], [MOCK_TEXT_CUSTOM_FIELD], ), ).toEqual([ { definitionId: MOCK_TEXT_CUSTOM_FIELD.definition.id, value: TEXT_CUSTOM_FIELD_IN_YAML.value, type: TEXT_CUSTOM_FIELD_IN_YAML.type, }, ]); }); it('builds number customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [NUMBER_CUSTOM_FIELD_IN_YAML], [MOCK_NUMBER_CUSTOM_FIELD], ), ).toEqual([ { definitionId: MOCK_NUMBER_CUSTOM_FIELD.definition.id, value: NUMBER_CUSTOM_FIELD_IN_YAML.value, type: NUMBER_CUSTOM_FIELD_IN_YAML.type, }, ]); }); it('builds boolean customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [BOOLEAN_CUSTOM_FIELD_IN_YAML], [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, }, ]); }); it('builds user customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [USER_CUSTOM_FIELD_IN_YAML], [MOCK_USER_CUSTOM_FIELD], ), ).toEqual([ { definitionId: MOCK_USER_CUSTOM_FIELD.definition.id, value: USER_CUSTOM_FIELD_IN_YAML.value, type: USER_CUSTOM_FIELD_IN_YAML.type, }, ]); }); it('builds single select customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [SINGLE_SELECT_CUSTOM_FIELD_IN_YAML], [MOCK_SINGLE_SELECT_CUSTOM_FIELD], ), ).toEqual([ { definitionId: MOCK_SINGLE_SELECT_CUSTOM_FIELD.definition.id, value: SINGLE_SELECT_CUSTOM_FIELD_IN_YAML.value, type: SINGLE_SELECT_CUSTOM_FIELD_IN_YAML.type, }, ]); }); it('builds single select customField from yaml to update format using displayValue', () => { expect( buildCustomFieldToUpdateFormat( [SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE], [MOCK_SINGLE_SELECT_CUSTOM_FIELD_2], ), ).toEqual([ { definitionId: MOCK_SINGLE_SELECT_CUSTOM_FIELD_2.definition.id, value: MOCK_OPTION_UUIDS_2[1], type: SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE.type, }, ]); }); it('builds multi select customField from yaml to update format', () => { expect( buildCustomFieldToUpdateFormat( [MULTI_SELECT_CUSTOM_FIELD_IN_YAML], [MOCK_MULTI_SELECT_CUSTOM_FIELD], ), ).toEqual([ { definitionId: MOCK_MULTI_SELECT_CUSTOM_FIELD.definition.id, value: MULTI_SELECT_CUSTOM_FIELD_IN_YAML.value, type: MULTI_SELECT_CUSTOM_FIELD_IN_YAML.type, }, ]); }); it('builds multi select customField from yaml to update format using displayValue', () => { expect( buildCustomFieldToUpdateFormat( [MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE], [MOCK_MULTI_SELECT_CUSTOM_FIELD_2], ), ).toEqual([ { definitionId: MOCK_MULTI_SELECT_CUSTOM_FIELD_2.definition.id, value: [MOCK_OPTION_UUIDS_2[0]], type: MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE.type, }, ]); }); describe('filtering out invalid select-type custom fields', () => { it('filters out single select custom fields with mismatching displayValue', () => { expect( buildCustomFieldToUpdateFormat( [SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE], [MOCK_SINGLE_SELECT_CUSTOM_FIELD], ), ).toEqual([]); }); it('filters out multi select custom fields with mismatching displayValue', () => { expect( buildCustomFieldToUpdateFormat( [MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE], [MOCK_MULTI_SELECT_CUSTOM_FIELD], ), ).toEqual([]); }); }); }); describe('mappedCustomFieldsToYamlFormat', () => { it('builds text customField to YAML format', () => { expect(mappedCustomFieldsToYamlFormat(MOCK_TEXT_CUSTOM_FIELD)).toEqual({ name: MOCK_TEXT_CUSTOM_FIELD.definition.name, type: CustomFieldType.TEXT, value: MOCK_TEXT_CUSTOM_FIELD.textValue, }); }); it('builds boolean customField to YAML format', () => { expect(mappedCustomFieldsToYamlFormat(MOCK_BOOLEAN_CUSTOM_FIELD)).toEqual({ name: MOCK_BOOLEAN_CUSTOM_FIELD.definition.name, type: CustomFieldType.BOOLEAN, value: MOCK_BOOLEAN_CUSTOM_FIELD.booleanValue, }); }); it('builds number customField to YAML format', () => { expect(mappedCustomFieldsToYamlFormat(MOCK_NUMBER_CUSTOM_FIELD)).toEqual({ name: MOCK_NUMBER_CUSTOM_FIELD.definition.name, type: CustomFieldType.NUMBER, value: MOCK_NUMBER_CUSTOM_FIELD.numberValue, }); }); it('builds user customField to YAML format', () => { expect(mappedCustomFieldsToYamlFormat(MOCK_USER_CUSTOM_FIELD)).toEqual({ name: MOCK_USER_CUSTOM_FIELD.definition.name, type: CustomFieldType.USER, value: MOCK_USER_CUSTOM_FIELD.userIdValue, }); }); it('builds single select customField to YAML format', () => { expect( mappedCustomFieldsToYamlFormat(MOCK_SINGLE_SELECT_CUSTOM_FIELD), ).toEqual({ name: MOCK_SINGLE_SELECT_CUSTOM_FIELD.definition.name, type: CustomFieldType.SINGLE_SELECT, value: MOCK_SINGLE_SELECT_CUSTOM_FIELD.option.id, displayValue: MOCK_SINGLE_SELECT_CUSTOM_FIELD.option.value, }); }); it('builds multi select customField to YAML format', () => { expect( mappedCustomFieldsToYamlFormat(MOCK_MULTI_SELECT_CUSTOM_FIELD), ).toEqual({ name: MOCK_MULTI_SELECT_CUSTOM_FIELD.definition.name, type: CustomFieldType.MULTI_SELECT, value: MOCK_MULTI_SELECT_CUSTOM_FIELD.options.map((option) => option.id), displayValue: MOCK_MULTI_SELECT_CUSTOM_FIELD.options.map( (option) => option.value, ), }); }); }); describe('getValueFromDisplayValue', () => { describe('single select field', () => { it('returns value from displayValue', () => { expect( getValueFromDisplayValue( SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, MOCK_SINGLE_SELECT_CUSTOM_FIELD_2, ), ).toEqual(MOCK_OPTION_UUIDS_2[1]); }); it('returns null if displayValue is not present', () => { expect( getValueFromDisplayValue( SINGLE_SELECT_CUSTOM_FIELD_IN_YAML, MOCK_SINGLE_SELECT_CUSTOM_FIELD, ), ).toBeNull(); }); it('returns null if displayValue does not match any option', () => { expect( getValueFromDisplayValue( SINGLE_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, MOCK_SINGLE_SELECT_CUSTOM_FIELD, ), ).toBeNull(); }); }); describe('multi select field', () => { it('returns value from displayValue', () => { expect( getValueFromDisplayValue( MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, MOCK_MULTI_SELECT_CUSTOM_FIELD_2, ), ).toEqual([MOCK_OPTION_UUIDS_2[0]]); }); it('returns null if displayValue is not present', () => { expect( getValueFromDisplayValue( MULTI_SELECT_CUSTOM_FIELD_IN_YAML, MOCK_MULTI_SELECT_CUSTOM_FIELD, ), ).toBeNull(); }); it('returns null if displayValue does not match any option', () => { expect( getValueFromDisplayValue( MULTI_SELECT_CUSTOM_FIELD_IN_YAML_WITH_DISPLAY_VALUE, MOCK_MULTI_SELECT_CUSTOM_FIELD, ), ).toBeNull(); }); }); });