diff --git a/src/account-settings/EditableSelectField.jsx b/src/account-settings/EditableSelectField.jsx
index ec2406b0c..8eea426bf 100644
--- a/src/account-settings/EditableSelectField.jsx
+++ b/src/account-settings/EditableSelectField.jsx
@@ -98,9 +98,28 @@ 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 (
+
+ );
+ }
+ return (
+
+ );
+ });
return (
({
+ ...jest.requireActual('react-redux'),
+ useDispatch: () => mockDispatch,
+}));
+
+jest.mock('@edx/frontend-platform/auth');
+jest.mock('../data/selectors', () => jest.fn().mockImplementation(() => ({ certPreferenceSelector: () => ({}) })));
+
+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();
+ });
+});