Browse Source

test(network): add/update unit test for quick mine feature

feat/auto-update
jamaljsr 5 years ago
parent
commit
2db39fd867
  1. 45
      src/components/network/NetworkActions.spec.tsx
  2. 2
      src/store/models/designer.spec.ts
  3. 2
      src/store/models/network.spec.ts

45
src/components/network/NetworkActions.spec.tsx

@ -1,14 +1,29 @@
import React from 'react';
import { fireEvent } from '@testing-library/dom';
import { render } from '@testing-library/react';
import { fireEvent, wait } from '@testing-library/dom';
import { Status } from 'types';
import { getNetwork, injections, renderWithProviders } from 'utils/tests';
import NetworkActions from './NetworkActions';
describe('NetworkActions Component', () => {
const handleClick = jest.fn();
const renderComponent = (status: Status) => {
return render(<NetworkActions status={status} onClick={handleClick} />);
const network = getNetwork(1, 'test network', status);
network.nodes.bitcoin.forEach(n => (n.status = status));
const initialState = {
network: {
networks: [network],
},
bitcoind: {
chainInfo: {
blocks: 10,
},
},
};
return renderWithProviders(
<NetworkActions network={network} onClick={handleClick} />,
{ initialState },
);
};
it('should render the Starting status', () => {
@ -52,4 +67,28 @@ describe('NetworkActions Component', () => {
fireEvent.click(primaryBtn);
expect(handleClick).toBeCalled();
});
it('should display the current block height', () => {
const { getByText } = renderComponent(Status.Started);
expect(getByText('height: 10')).toBeInTheDocument();
});
it('should mine a block when the Mine button is clicked', async () => {
const mineMock = injections.bitcoindService.mine as jest.Mock;
mineMock.mockResolvedValue(true);
const { getByText, store } = renderComponent(Status.Started);
fireEvent.click(getByText('Quick Mine'));
await wait(() => {
const port = store.getState().network.networks[0].nodes.bitcoin[0].ports.rpc;
expect(mineMock).toBeCalledWith(1, port);
});
});
it('should display an error if mining fails', async () => {
const mineMock = injections.bitcoindService.mine as jest.Mock;
mineMock.mockRejectedValue(new Error('connection failed'));
const { getByText, findByText } = renderComponent(Status.Started);
fireEvent.click(getByText('Quick Mine'));
expect(await findByText(/connection failed/)).toBeInTheDocument();
});
});

2
src/store/models/designer.spec.ts

@ -5,6 +5,7 @@ import { BitcoindLibrary, DockerLibrary, LndLibrary, Status } from 'types';
import { LOADING_NODE_ID } from 'utils/constants';
import { injections } from 'utils/tests';
import appModel from './app';
import bitcoindModel from './bitcoind';
import designerModel from './designer';
import modalsModel from './modals';
import networkModel from './network';
@ -23,6 +24,7 @@ describe('Designer model', () => {
const rootModel = {
app: appModel,
network: networkModel,
bitcoind: bitcoindModel,
designer: designerModel,
modals: modalsModel,
};

2
src/store/models/network.spec.ts

@ -4,6 +4,7 @@ import { LndVersion, Network, Status } from 'types';
import { initChartFromNetwork } from 'utils/chart';
import * as files from 'utils/files';
import { getNetwork, injections } from 'utils/tests';
import bitcoindModel from './bitcoind';
import designerModel from './designer';
import lndModel from './lnd';
import networkModel from './network';
@ -22,6 +23,7 @@ describe('Network model', () => {
const rootModel = {
network: networkModel,
lnd: lndModel,
bitcoind: bitcoindModel,
designer: designerModel,
};
// initialize store for type inference

Loading…
Cancel
Save