Fix username as a required field

Fix username as a required field. `UserForm` is used for adding and
editing an user. When adding an user, the initial user value is a `{}`
update logic to cover this case.

Also, add unit-tests to cover this particular case.

See: https://github.com/ansible/awx/issues/8453
This commit is contained in:
nixocio
2020-10-27 14:57:17 -04:00
parent 0d3c9ebc2b
commit 40e821d0d8
2 changed files with 57 additions and 5 deletions

View File

@@ -68,11 +68,9 @@ function UserFormFields({ user, i18n }) {
name="username"
type="text"
validate={
!ldapUser && externalAccount === null
? required(null, i18n)
: () => undefined
!ldapUser && !externalAccount ? required(null, i18n) : () => undefined
}
isRequired={!ldapUser && externalAccount === null}
isRequired={!ldapUser && !externalAccount}
/>
<FormField
id="user-email"

View File

@@ -93,7 +93,7 @@ describe('<UserForm />', () => {
});
});
test('password fields are required on add', async () => {
test('fields required on add', async () => {
await act(async () => {
wrapper = mountWithContexts(
<UserForm handleSubmit={jest.fn()} handleCancel={jest.fn()} />
@@ -105,6 +105,26 @@ describe('<UserForm />', () => {
expect(passwordFields.length).toBe(2);
expect(passwordFields.at(0).prop('isRequired')).toBe(true);
expect(passwordFields.at(1).prop('isRequired')).toBe(true);
expect(wrapper.find('FormField[label="Username"]').prop('isRequired')).toBe(
true
);
});
test('username field is required on edit', async () => {
await act(async () => {
wrapper = mountWithContexts(
<UserForm
user={{ ...mockData, external_account: '', auth: [] }}
handleSubmit={jest.fn()}
handleCancel={jest.fn()}
/>
);
});
expect(wrapper.find('FormField[label="Username"]').prop('isRequired')).toBe(
true
);
});
test('password fields are not required on edit', async () => {
@@ -125,6 +145,40 @@ describe('<UserForm />', () => {
expect(passwordFields.at(1).prop('isRequired')).toBe(false);
});
test('username should not be required for external accounts', async () => {
await act(async () => {
wrapper = mountWithContexts(
<UserForm
user={mockData}
handleSubmit={jest.fn()}
handleCancel={jest.fn()}
/>
);
});
expect(wrapper.find('FormField[label="Username"]').prop('isRequired')).toBe(
false
);
});
test('username should not be required for ldap accounts', async () => {
await act(async () => {
wrapper = mountWithContexts(
<UserForm
user={{
...mockData,
ldap_dn:
'uid=binduser,cn=users,cn=accounts,dc=lan,dc=example,dc=com',
}}
handleSubmit={jest.fn()}
handleCancel={jest.fn()}
/>
);
});
expect(wrapper.find('FormField[label="Username"]').prop('isRequired')).toBe(
false
);
});
test('password fields are not displayed for social/ldap login', async () => {
await act(async () => {
wrapper = mountWithContexts(