* Feat/800: Configured routes for different proposal types * Feat/800: Refactored propose.tsx to be a hub for the new proposal routes * Feat/800: Link style tweak for proposals guide * Feat/927: Hydrating the new proposal forms * chore: fix typings for shared components * Feat/927: Proposal forms built with reusable components * Feat/800: Updated network params, added new method to get param keys as well as values, updated generated types * Feat/800: Updated and built more reusable proposal form components * Feat/800: Removed old catchall file of reusable proposal form components * Feat/800: Added utils for vote deadline and enactment timestamps * Feat/800: Readded necessary 'color-scheme-dark' class for dark-theme date and datetime inputs * Feat/800: Tweak to icon positioning on the dialog component * Feat/800: Regenerated types for network params * Feat/800: Added iso8601-duration package for working with API vote deadline and enactment data * Feat/800: Reworked the proposal forms * Feat/800: Couple of translation additions * Feat/800: Another translation addition * Feat/800: Raw proposal test (tests as per old proposal form test) * Feat/800: Some basic proposal form tests * Feat/800: Fixing small types error in test * Feat/800: Updating simple proposal form tests * Feat/800: Set up env-specific proposal docs links * Feat/800: Deadlines to the bottom of proposal forms * Feat/800: Another type error from API changes fixed * Feat/800: Added the spam protection min tokens network param to proposal forms requests, and the min requirements now displays the larger value of spam protection or min proposer balance * Feat/800: Network param value change now a textarea * Feat/800: Improved way to pass docs url * Feat/800: Added useful explorer links to proposal forms * Feat/800: Show current value of selected network param in proposal form * Feat/800: Removed wallet-confirmation buffer, suspect it is not necessary * Feat/800: Condense vote and enactment ui into single component for simpler state management, memoised some stuff * Feat/800: Set a default select option for the market selector * Feat/800: For network params that aren't JSON, display the network param current value in a readonly text input rather than the syntax highlighter * Feat/800: Corrected network param form network params * Feat/800: Timestamp functions for closing, enactment and validation, with tests * Feat/800: More translations * Feat/800: Added validation options to proposal-form-vote-and-enactment-deadline.tsx, generally improved the component and added tests * Feat/800: Improved workings of proposal-form-min-requirements.tsx and wrote tests * Feat/800: Tests for the other reusable form components * Feat/800: Improved tests for the proposal forms * Feat/800: Corrected mistake in get-enactment-timestamp.ts * Feat/800: Fixed type issues that were preventing spotting an error * Feat/800: Added some extra docs links * Feat/800: Using renamed Dialog passed in from useProposalSubmit * refactor: network params to return an object * fix: update net param form, remove old net params obj * fix: check for params before rendering * Feat/800: Rename and simplify isJson based off PR comment * Feat/800: Small tweaks to timestamp helpers based on PR comments * Feat/800: Removed proposal-docs-link.tsx * Feat/800: Used bignumber for min-requirements calculation * Feat/800: Update tests to work with merged network params branch * Feat/800: Removed unnecessary translations splitting * Feat/800: Removed unwanted test * Feat/800: Removed unwanted tests * Feat/800: Consistent arrow functions * Feat/800: Sorted links * Feat/800: Removed unnecessary typecasting * Feat/800: Refactored routing * Feat/800: Refactored mocking of proposal forms to use MockedProvider * Feat/800: Correct response from the raw proposal submission test * Feat/800: Removed console.logs added for debugging * Feat/800: Result of running 'nx format:write' * Feat/800: Cleaning up lint warnings * Update apps/token/.env.stagnet3 Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com> * Feat/800: Added extra test for docs link in the proposal-form-terms component * Feat/800: Removed stray console.log * Feat/800: Added basic render test for proposal-form-terms and cleaned up a bit * Feat/800: Added tests for the correct form components for the different forms * Feat/800: Split up the proposal-form-vote-and-enactment-deadline components inside the file to make things a bit more readable * Feat/800: router config webpack chunk name tweak * Feat/800: Lint issue fixed * Feat/800: Fixed timing issue with get-[deadline]-timestamp tests * Feat/800: Setting a system time in proposal-form-vote-and-enactment-deadline.spec.tsx that doesn't get affected by British Summer Time * Feat/800: Skipping a cypress test as the newProposalButton no longer takes a user directly to a proposal form. Leaving it in the codebase as the test is very likely to be updated. * Feat/800: Adding comment on why I've skipped a cypress test Co-authored-by: Dexter <dexter@vega.xyz> Co-authored-by: Matthew Russell <mattrussell36@gmail.com> Co-authored-by: Dexter Edwards <dexter.edwards93@gmail.com>
116 lines
3.3 KiB
TypeScript
116 lines
3.3 KiB
TypeScript
import { renderHook, waitFor } from '@testing-library/react';
|
|
import type { MockedResponse } from '@apollo/client/testing';
|
|
import { MockedProvider } from '@apollo/client/testing';
|
|
import type { NetworkParamsKey } from './use-network-params';
|
|
import {
|
|
NetworkParams,
|
|
NETWORK_PARAMETERS_QUERY,
|
|
NETWORK_PARAMETER_QUERY,
|
|
useNetworkParam,
|
|
useNetworkParams,
|
|
} from './use-network-params';
|
|
import type { ReactNode } from 'react';
|
|
import type { NetworkParams as NetworkParamsResponse } from './__generated__';
|
|
|
|
describe('useNetworkParam', () => {
|
|
const setup = (arg: NetworkParamsKey) => {
|
|
const mock: MockedResponse = {
|
|
request: {
|
|
query: NETWORK_PARAMETER_QUERY,
|
|
variables: {
|
|
key: arg,
|
|
},
|
|
},
|
|
result: {
|
|
data: {
|
|
networkParameter: {
|
|
__typename: 'NetworkParameter',
|
|
key: 'reward.staking.delegation.payoutDelay',
|
|
value: '200',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
const wrapper = ({ children }: { children: ReactNode }) => (
|
|
<MockedProvider mocks={[mock]}>{children}</MockedProvider>
|
|
);
|
|
|
|
return renderHook(() => useNetworkParam(arg), { wrapper });
|
|
};
|
|
|
|
it('returns a single param value', async () => {
|
|
const { result } = setup(
|
|
NetworkParams.reward_staking_delegation_payoutDelay
|
|
);
|
|
expect(result.current.param).toBe(null);
|
|
await waitFor(() => {
|
|
expect(result.current.param).toEqual('200');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('useNetworkParams', () => {
|
|
const setup = (args?: NetworkParamsKey[]) => {
|
|
const mock: MockedResponse<NetworkParamsResponse> = {
|
|
request: {
|
|
query: NETWORK_PARAMETERS_QUERY,
|
|
},
|
|
result: {
|
|
data: {
|
|
networkParameters: [
|
|
{
|
|
__typename: 'NetworkParameter',
|
|
key: 'spam.protection.proposal.min.tokens',
|
|
value: '1',
|
|
},
|
|
{
|
|
__typename: 'NetworkParameter',
|
|
key: 'governance.proposal.updateMarket.minProposerBalance',
|
|
value: '2',
|
|
},
|
|
{
|
|
__typename: 'NetworkParameter',
|
|
key: 'reward.staking.delegation.payoutDelay',
|
|
value: '200',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|
|
const wrapper = ({ children }: { children: ReactNode }) => (
|
|
<MockedProvider mocks={[mock]}>{children}</MockedProvider>
|
|
);
|
|
|
|
return renderHook(() => useNetworkParams(args), { wrapper });
|
|
};
|
|
it('returns an object with only desired params', async () => {
|
|
const { result } = setup([
|
|
NetworkParams.spam_protection_proposal_min_tokens,
|
|
NetworkParams.governance_proposal_updateMarket_minProposerBalance,
|
|
]);
|
|
|
|
expect(result.current.params).toBe(null);
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.params).toEqual({
|
|
spam_protection_proposal_min_tokens: '1',
|
|
governance_proposal_updateMarket_minProposerBalance: '2',
|
|
});
|
|
});
|
|
});
|
|
|
|
it('returns all params', async () => {
|
|
const { result } = setup();
|
|
|
|
expect(result.current.params).toBe(null);
|
|
|
|
await waitFor(() => {
|
|
expect(result.current.params).toEqual({
|
|
spam_protection_proposal_min_tokens: '1',
|
|
governance_proposal_updateMarket_minProposerBalance: '2',
|
|
reward_staking_delegation_payoutDelay: '200',
|
|
});
|
|
});
|
|
});
|
|
});
|