vega-frontend-monorepo/apps/trading/components/web3-container/web3-container.spec.tsx
Matthew Russell 8e9c2e4080
Feat/105 Web3 Setup (#119)
* add deposit page

* add web3 provider using web3-react package

* add env setup, add guard for incorrect chain id

* add lib for web3-provider

* make wallet and ethereum connect dialogs look more consistent

* add setup tests file for jest-dom

* remove chain id config and just use appChainId prop, add disconnect button to invalid chainId state

* remove .env file for now, will complete as own ticket

* switch handling of connect dialog state to the consuming app

* rename web3-provider package to just web3

* envs for each environment so we can specify chainId

* remove fallback to testnet for apollo client creation

* make web3container enforce connection before rendering childen

* move infura id to env var
2022-03-25 00:44:10 -07:00

66 lines
1.6 KiB
TypeScript

import { fireEvent, render, screen } from '@testing-library/react';
import { Web3Container } from './web3-container';
const defaultHookValue = {
isActive: false,
error: undefined,
connector: null,
chainId: 3,
};
let mockHookValue;
jest.mock('@web3-react/core', () => {
const original = jest.requireActual('@web3-react/core');
return {
...original,
useWeb3React: jest.fn(() => mockHookValue),
};
});
test('Prompt to connect opens dialog', () => {
mockHookValue = defaultHookValue;
render(
<Web3Container>
<div>Child</div>
</Web3Container>
);
expect(screen.queryByText('Child')).not.toBeInTheDocument();
expect(screen.queryByTestId('web3-connector-list')).not.toBeInTheDocument();
expect(screen.getByText('Connect your Ethereum wallet')).toBeInTheDocument();
fireEvent.click(screen.getByText('Connect'));
expect(screen.getByTestId('web3-connector-list')).toBeInTheDocument();
});
test('Error message is shown', () => {
const message = 'Opps! An error';
mockHookValue = { ...defaultHookValue, error: new Error(message) };
render(
<Web3Container>
<div>Child</div>
</Web3Container>
);
expect(screen.queryByText('Child')).not.toBeInTheDocument();
expect(screen.getByText(`Something went wrong: ${message}`));
});
test('Chain id matches app configuration', () => {
const expectedChainId = 4;
mockHookValue = {
...defaultHookValue,
isActive: true,
chainId: expectedChainId,
};
render(
<Web3Container>
<div>Child</div>
</Web3Container>
);
expect(screen.queryByText('Child')).not.toBeInTheDocument();
expect(screen.getByText(`This app only works on chain ID: 3`));
});