From 40e821d0d8888a38052a59eaa0a9993b82f6dc90 Mon Sep 17 00:00:00 2001 From: nixocio Date: Tue, 27 Oct 2020 14:57:17 -0400 Subject: [PATCH] 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 --- .../src/screens/User/shared/UserForm.jsx | 6 +- .../src/screens/User/shared/UserForm.test.jsx | 56 ++++++++++++++++++- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/awx/ui_next/src/screens/User/shared/UserForm.jsx b/awx/ui_next/src/screens/User/shared/UserForm.jsx index dbadf2d17a..7d65e7369f 100644 --- a/awx/ui_next/src/screens/User/shared/UserForm.jsx +++ b/awx/ui_next/src/screens/User/shared/UserForm.jsx @@ -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} /> ', () => { }); }); - test('password fields are required on add', async () => { + test('fields required on add', async () => { await act(async () => { wrapper = mountWithContexts( @@ -105,6 +105,26 @@ describe('', () => { 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( + + ); + }); + + expect(wrapper.find('FormField[label="Username"]').prop('isRequired')).toBe( + true + ); }); test('password fields are not required on edit', async () => { @@ -125,6 +145,40 @@ describe('', () => { expect(passwordFields.at(1).prop('isRequired')).toBe(false); }); + test('username should not be required for external accounts', async () => { + await act(async () => { + wrapper = mountWithContexts( + + ); + }); + 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( + + ); + }); + 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(