From 4f8a585956528469f0197345bdb0c814db938faa Mon Sep 17 00:00:00 2001 From: sam-keen Date: Tue, 13 Sep 2022 16:58:07 +0100 Subject: [PATCH] Feat/800: Improved tests for the proposal forms --- .../freeform/propose-freeform.spec.tsx | 73 +++++- .../propose-network-parameter.spec.tsx | 128 ++++++++-- .../propose-network-parameter.tsx | 13 +- .../new-asset/propose-new-asset.spec.tsx | 73 +++++- .../propose/new-asset/propose-new-asset.tsx | 12 + .../new-market/propose-new-market.spec.tsx | 25 +- .../propose/new-market/propose-new-market.tsx | 1 + .../propose/raw/proposal-raw.spec.tsx | 225 +++++++++--------- .../propose-update-market.spec.tsx | 178 +++++++++++++- .../update-market/propose-update-market.tsx | 3 +- 10 files changed, 565 insertions(+), 166 deletions(-) diff --git a/apps/token/src/routes/governance/propose/freeform/propose-freeform.spec.tsx b/apps/token/src/routes/governance/propose/freeform/propose-freeform.spec.tsx index 3b2b5ad97..dcac50ccd 100644 --- a/apps/token/src/routes/governance/propose/freeform/propose-freeform.spec.tsx +++ b/apps/token/src/routes/governance/propose/freeform/propose-freeform.spec.tsx @@ -1,18 +1,77 @@ -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import { ProposeFreeform } from './propose-freeform'; -import { NetworkLoader } from '@vegaprotocol/environment'; -import { createClient } from '../../../../lib/apollo-client'; +import { MockedProvider } from '@apollo/client/testing'; +import { + mockWalletContext, + networkParamsQueryMock, +} from '../../test-helpers/mocks'; +import { AppStateProvider } from '../../../../contexts/app-state/app-state-provider'; +import { VegaWalletContext } from '@vegaprotocol/wallet'; +import { BrowserRouter as Router } from 'react-router-dom'; + +jest.mock('../../../../hooks/use-network-param.tsx', () => ({ + useNetworkParamWithKeys: () => ({ + data: [ + { + __typename: 'NetworkParameter', + key: 'governance.proposal.freeform.maxClose', + value: '8760h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.freeform.maxEnact', + value: '8760h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.freeform.minClose', + value: '1h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.freeform.minEnact', + value: '2h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.freeform.minProposerBalance', + value: '1', + }, + { + __typename: 'NetworkParameter', + key: 'spam.protection.freeform.min.tokens', + value: '1000000000000000000', + }, + ], + loading: false, + error: undefined, + }), +})); const renderComponent = () => render( - - - + + + + + + + + + ); -describe('ProposeFreeform', () => { +// Note: form submission is tested in propose-raw.spec.tsx. Reusable form +// components are tested in their own directory. + +describe('Propose Freeform', () => { it('should render successfully', () => { const { baseElement } = renderComponent(); expect(baseElement).toBeTruthy(); }); + + it('should render the title', () => { + renderComponent(); + expect(screen.getByText('New freeform proposal')).toBeTruthy(); + }); }); diff --git a/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.spec.tsx b/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.spec.tsx index aa3cf9732..5054ede3b 100644 --- a/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.spec.tsx +++ b/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.spec.tsx @@ -1,37 +1,115 @@ -import { render } from '@testing-library/react'; +import { fireEvent, render, screen } from '@testing-library/react'; import { ProposeNetworkParameter } from './propose-network-parameter'; -import { NetworkLoader } from '@vegaprotocol/environment'; -import { createClient } from '../../../../lib/apollo-client'; +import { MockedProvider } from '@apollo/client/testing'; +import { + mockWalletContext, + networkParamsQueryMock, +} from '../../test-helpers/mocks'; +import { AppStateProvider } from '../../../../contexts/app-state/app-state-provider'; +import { VegaWalletContext } from '@vegaprotocol/wallet'; +import { BrowserRouter as Router } from 'react-router-dom'; + +jest.mock('../../../../hooks/use-network-param.tsx', () => ({ + useNetworkParamWithKeys: () => ({ + data: [ + { + __typename: 'NetworkParameter', + key: 'governance.proposal.updateNetParam.maxClose', + value: '8760h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.updateNetParam.maxEnact', + value: '8760h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.updateNetParam.minClose', + value: '1h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.updateNetParam.minEnact', + value: '2h0m0s', + }, + { + __typename: 'NetworkParameter', + key: 'governance.proposal.updateNetParam.minProposerBalance', + value: '1', + }, + { + __typename: 'NetworkParameter', + key: 'spam.protection.proposal.min.tokens', + value: '1000000000000000000', + }, + { + key: 'limits.assets.proposeEnabledFrom', + value: '', + }, + { + key: 'limits.markets.proposeEnabledFrom', + value: '', + }, + { + key: 'market.auction.maximumDuration', + value: '168h0m0s', + }, + ], + loading: false, + error: undefined, + }), +})); const renderComponent = () => render( - - - + + + + + + + + + ); -// const mockNetworkParams = [ -// { -// key: 'governance.proposal.updateNetParam.requiredParticipation', -// value: '0.3', -// }, -// { -// key: 'limits.assets.proposeEnabledFrom', -// value: '', -// }, -// { -// key: 'limits.markets.proposeEnabledFrom', -// value: '', -// }, -// { -// key: 'market.auction.maximumDuration', -// value: '168h0m0s', -// }, -// ]; +// Note: form submission is tested in propose-raw.spec.tsx. Reusable form +// components are tested in their own directory. -describe('ProposeNetworkParameter', () => { +describe('Propose Network Parameter', () => { it('should render successfully', () => { const { baseElement } = renderComponent(); expect(baseElement).toBeTruthy(); }); + + it('should render the correct title', () => { + renderComponent(); + expect(screen.getByText('Update network parameter proposal')).toBeTruthy(); + }); + + it('should render the network param select element with no initial value', () => { + renderComponent(); + expect(screen.getByTestId('proposal-parameter-select')).toHaveValue(''); + }); + + it('should render the current param value and a new value input when the network param select element is changed', () => { + renderComponent(); + const select = screen.getByTestId('proposal-parameter-select'); + expect(select).toHaveValue(''); + + fireEvent.change(screen.getByTestId('proposal-parameter-select'), { + target: { + value: 'spam.protection.proposal.min.tokens', + }, + }); + + expect(select).toHaveValue('spam.protection.proposal.min.tokens'); + expect( + screen.getByTestId('selected-proposal-param-current-value') + ).toHaveValue('1000000000000000000'); + + expect( + screen.getByTestId('selected-proposal-param-new-value') + ).toBeVisible(); + }); }); diff --git a/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.tsx b/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.tsx index 4a78e5080..5b243fa43 100644 --- a/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.tsx +++ b/apps/token/src/routes/governance/propose/network-parameter/propose-network-parameter.tsx @@ -45,10 +45,15 @@ const SelectedNetworkParamCurrentValue = ({ return (

{t('CurrentValue')}

+ {isJsonObject(value) ? ( ) : ( - + )}
); @@ -193,6 +198,7 @@ export const ProposeNetworkParameter = () => { hideLabel={true} >