From 80fb0760b33e9a46b10305ff0094b179bf481f19 Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Thu, 27 Jun 2019 16:47:20 +0400 Subject: [PATCH] fix delay when updating safe's owner name, add test file boilerplate for managing owners --- .../ManageOwners/EditOwnerModal/index.jsx | 32 +++++++------------ .../Settings/ManageOwners/index.jsx | 12 ++++++- src/routes/safe/components/Settings/index.jsx | 1 + .../safe/store/middleware/safeStorage.js | 8 ++++- ...test.js => safe.dom.settings.name.test.js} | 0 src/test/safe.dom.settings.owners.test.js | 25 +++++++++++++++ 6 files changed, 55 insertions(+), 23 deletions(-) rename src/test/{safe.dom.settings.test.js => safe.dom.settings.name.test.js} (100%) create mode 100644 src/test/safe.dom.settings.owners.test.js diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.jsx b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.jsx index 1d0453ba..99f73289 100644 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.jsx @@ -17,14 +17,8 @@ import Paragraph from '~/components/layout/Paragraph' import Identicon from '~/components/Identicon' import { getEtherScanLink } from '~/logic/wallets/getWeb3' import type { Owner } from '~/routes/safe/store/models/owner' -import { makeOwner } from '~/routes/safe/store/models/owner' -import { - composeValidators, - required, - minMaxLength, -} from '~/components/forms/validator' +import { composeValidators, required, minMaxLength } from '~/components/forms/validator' import Modal from '~/components/Modal' -import { setOwners } from '~/logic/safe/utils' import { styles } from './style' import { secondary } from '~/theme/variables' @@ -49,6 +43,7 @@ type Props = { owners: List, network: string, selectedOwnerName: string, + updateSafe: Function, } const EditOwnerComponent = ({ @@ -58,14 +53,15 @@ const EditOwnerComponent = ({ safeAddress, ownerAddress, selectedOwnerName, + updateSafe, owners, network, }: Props) => { const handleSubmit = (values) => { - const updatedOwners = owners.filter(o => o.address !== ownerAddress).push( - makeOwner({ name: values.ownerName, address: ownerAddress }), - ) - setOwners(safeAddress, updatedOwners) + const ownerToUpdateIndex = owners.findIndex(o => o.address === ownerAddress) + const updatedOwners = owners.update(ownerToUpdateIndex, owner => owner.set('name', values.ownerName)) + + updateSafe({ address: safeAddress, owners: updatedOwners }) onClose() } @@ -79,7 +75,7 @@ const EditOwnerComponent = ({ > - Edit owner name + Edit owner name @@ -117,16 +113,10 @@ const EditOwnerComponent = ({ - diff --git a/src/routes/safe/components/Settings/ManageOwners/index.jsx b/src/routes/safe/components/Settings/ManageOwners/index.jsx index 3954dbfe..e275e7f8 100644 --- a/src/routes/safe/components/Settings/ManageOwners/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/index.jsx @@ -47,6 +47,7 @@ type Props = { threshold: number, userAddress: string, createTransaction: Function, + updateSafe: Function, } type State = { @@ -88,7 +89,15 @@ class ManageOwners extends React.Component { render() { const { - classes, safeAddress, safeName, owners, threshold, network, userAddress, createTransaction, + classes, + safeAddress, + safeName, + owners, + threshold, + network, + userAddress, + createTransaction, + updateSafe, } = this.props const { showAddOwner, @@ -206,6 +215,7 @@ class ManageOwners extends React.Component { selectedOwnerName={selectedOwnerName} owners={owners} network={network} + updateSafe={updateSafe} /> ) diff --git a/src/routes/safe/components/Settings/index.jsx b/src/routes/safe/components/Settings/index.jsx index 7d67d86e..156e3413 100644 --- a/src/routes/safe/components/Settings/index.jsx +++ b/src/routes/safe/components/Settings/index.jsx @@ -145,6 +145,7 @@ class Settings extends React.Component { network={network} createTransaction={createTransaction} userAddress={userAddress} + updateSafe={updateSafe} /> )} {granted && menuOptionIndex === 3 && ( diff --git a/src/routes/safe/store/middleware/safeStorage.js b/src/routes/safe/store/middleware/safeStorage.js index d49b1a50..f6dc81aa 100644 --- a/src/routes/safe/store/middleware/safeStorage.js +++ b/src/routes/safe/store/middleware/safeStorage.js @@ -1,8 +1,8 @@ // @flow +import type { Store, AnyAction } from 'redux' import { ADD_SAFE } from '~/routes/safe/store/actions/addSafe' import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe' import { REMOVE_SAFE } from '~/routes/safe/store/actions/removeSafe' -import type { Store, AnyAction } from 'redux' import { type GlobalState } from '~/store/' import { saveSafes, setOwners, removeOwners } from '~/logic/safe/utils' import { safesMapSelector } from '~/routes/safeList/store/selectors' @@ -41,6 +41,12 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn if (action.type === ADD_SAFE) { const { safe } = action.payload setOwners(safe.address, safe.owners) + } else if (action.type === UPDATE_SAFE) { + const { address, owners } = action.payload + + if (address && owners) { + setOwners(address, owners) + } } else if (action.type === REMOVE_SAFE) { const safeAddress = action.payload removeOwners(safeAddress) diff --git a/src/test/safe.dom.settings.test.js b/src/test/safe.dom.settings.name.test.js similarity index 100% rename from src/test/safe.dom.settings.test.js rename to src/test/safe.dom.settings.name.test.js diff --git a/src/test/safe.dom.settings.owners.test.js b/src/test/safe.dom.settings.owners.test.js new file mode 100644 index 00000000..802e769e --- /dev/null +++ b/src/test/safe.dom.settings.owners.test.js @@ -0,0 +1,25 @@ +// @flow +import { fireEvent, cleanup } from '@testing-library/react' +import { aNewStore } from '~/store' +import { aMinedSafe } from '~/test/builder/safe.redux.builder' +import { renderSafeView } from '~/test/builder/safe.dom.utils' +import { sleep } from '~/utils/timer' +import 'jest-dom/extend-expect' +import { SETTINGS_TAB_BTN_TESTID, SAFE_VIEW_NAME_HEADING_TESTID } from '~/routes/safe/components/Layout' +import { SAFE_NAME_INPUT_TESTID, SAFE_NAME_SUBMIT_BTN_TESTID } from '~/routes/safe/components/Settings/ChangeSafeName' + +afterEach(cleanup) + +describe('DOM > Feature > Settings > Manage owners', () => { + let store + let safeAddress + beforeEach(async () => { + store = aNewStore() + // using 4th account because other accounts were used in other tests and paid gas + safeAddress = await aMinedSafe(store) + }) + + it('Changes owner\'s name', async () => { + + }) +})