From 208ea3013c6d3468ce7ee3fac43da19090092dfb Mon Sep 17 00:00:00 2001
From: amerkadicE <97883527+amerkadicE@users.noreply.github.com>
Date: Fri, 10 Feb 2023 15:27:13 +0100
Subject: [PATCH] Make username mandatory in the edit contact screen (#17425)
---
.../edit-contact/edit-contact.component.js | 7 ++-
.../edit-contact/edit-contact.test.js | 61 +++++++++++++++++++
2 files changed, 65 insertions(+), 3 deletions(-)
create mode 100644 ui/pages/settings/contact-list-tab/edit-contact/edit-contact.test.js
diff --git a/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.component.js b/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.component.js
index 2cfb6142a..aea7272fb 100644
--- a/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.component.js
+++ b/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.component.js
@@ -170,9 +170,10 @@ export default class EditContact extends PureComponent {
}}
submitText={this.context.t('save')}
disabled={
- this.state.newName === name &&
- this.state.newAddress === address &&
- this.state.newMemo === memo
+ (this.state.newName === name &&
+ this.state.newAddress === address &&
+ this.state.newMemo === memo) ||
+ !this.state.newName.trim()
}
/>
diff --git a/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.test.js b/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.test.js
new file mode 100644
index 000000000..1853a4de1
--- /dev/null
+++ b/ui/pages/settings/contact-list-tab/edit-contact/edit-contact.test.js
@@ -0,0 +1,61 @@
+import React from 'react';
+import { fireEvent } from '@testing-library/react';
+import configureMockStore from 'redux-mock-store';
+import thunk from 'redux-thunk';
+import { renderWithProvider } from '../../../../../test/lib/render-helpers';
+import '@testing-library/jest-dom/extend-expect';
+import EditContact from './edit-contact.component';
+
+describe('AddContact component', () => {
+ const middleware = [thunk];
+ const state = {
+ metamask: {
+ provider: {
+ type: 'mainnet',
+ nickname: '',
+ },
+ },
+ };
+ const props = {
+ addToAddressBook: jest.fn(),
+ removeFromAddressBook: jest.fn(),
+ history: { push: jest.fn() },
+ name: '',
+ address: '0x0000000000000000001',
+ chainId: '',
+ memo: '',
+ viewRoute: '',
+ listRoute: '',
+ };
+
+ it('should render the component with correct properties', () => {
+ const store = configureMockStore(middleware)(state);
+
+ const { getByText } = renderWithProvider(, store);
+
+ expect(getByText('Username')).toBeInTheDocument();
+ expect(getByText('Ethereum public address')).toBeInTheDocument();
+ });
+
+ it('should validate the address correctly', () => {
+ const store = configureMockStore(middleware)(state);
+ const { getByText } = renderWithProvider(, store);
+
+ const input = document.getElementById('address');
+ fireEvent.change(input, { target: { value: 'invalid address' } });
+ setTimeout(() => {
+ expect(getByText('Invalid address')).toBeInTheDocument();
+ }, 100);
+ });
+
+ it('should get disabled submit button when username field is empty', () => {
+ const store = configureMockStore(middleware)(state);
+ const { getByText } = renderWithProvider(, store);
+
+ const input = document.getElementById('nickname');
+ fireEvent.change(input, { target: { value: '' } });
+
+ const saveButton = getByText('Save');
+ expect(saveButton).toBeDisabled();
+ });
+});