diff --git a/src/account-settings/EditableSelectField.jsx b/src/account-settings/EditableSelectField.jsx index ec2406b0c..c8098b276 100644 --- a/src/account-settings/EditableSelectField.jsx +++ b/src/account-settings/EditableSelectField.jsx @@ -98,9 +98,29 @@ const EditableSelectField = (props) => { value: confirmationValue, }); }; - const selectOptions = options.map(option => ( - - )); + + const selectOptions = options.map((option) => { + if (option.group) { + // If the option has a 'group' property, it represents an element with sub-options. + return ( + + {option.group.map((subOption) => ( + + ))} + + ); + } + return ( + + ); + }); return ( ({ + ...jest.requireActual('react-redux'), + useDispatch: () => mockDispatch, +})); + +jest.mock('@edx/frontend-platform/auth'); +jest.mock('../data/selectors', () => jest.fn().mockImplementation(() => ({ certPreferenceSelector: () => ({}) }))); + +const history = createMemoryHistory(); + +const IntlEditableSelectField = injectIntl(EditableSelectField); + +const mockStore = configureStore(); + +describe('EditableSelectField', () => { + let props = {}; + let store = {}; + + const reduxWrapper = children => ( + + + {children} + + + ); + + beforeEach(() => { + store = mockStore(); + props = { + name: 'testField', + label: 'Main Label', + emptyLabel: 'Empty Main Label', + type: 'text', + value: 'Test Field', + userSuppliedValue: '', + options: [ + { + label: 'Default Option', + value: 'defaultOption', + }, + { + label: 'User Options', + group: [ + { + label: 'Suboption 1', + value: 'suboption1', + }, + ], + }, + { + label: 'Other Options', + group: [ + { + label: 'Suboption 2', + value: 'suboption2', + }, + { + label: 'Suboption 3', + value: 'suboption3', + }, + ], + }, + ], + saveState: 'default', + error: '', + confirmationMessageDefinition: { + id: 'confirmationMessageId', + defaultMessage: 'Default Confirmation Message', + description: 'Description of the confirmation message', + }, + confirmationValue: 'Confirmation Value', + helpText: 'Helpful Text', + isEditing: false, + isEditable: true, + isGrayedOut: false, + }; + }); + + afterEach(() => jest.clearAllMocks()); + + it('renders EditableSelectField correctly with editing disabled', () => { + render(reduxWrapper()); + + expect(screen.getByText('Main Label')).toBeInTheDocument(); + expect(screen.getByText('Edit')).toBeInTheDocument(); + }); + + it('renders EditableSelectField correctly with editing enabled', () => { + props = { + ...props, + isEditing: true, + }; + + render(reduxWrapper()); + + expect(screen.getByText('Main Label')).toBeInTheDocument(); + expect(screen.getByText('Suboption 1')).toBeInTheDocument(); + expect(screen.getByText('Default Option')).toBeInTheDocument(); + expect(screen.getByText('Save')).toBeInTheDocument(); + expect(screen.getByText('Cancel')).toBeInTheDocument(); + }); +});