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 }) => (
{children}
);
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 = {
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 }) => (
{children}
);
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',
});
});
});
});