import React from 'react'; import { mount } from '../../utils/test-enzyme'; import api from '../../utils/api'; import { ActionBar } from './ActionBar'; const mockPackageMeta: jest.Mock = jest.fn(() => ({ latest: { homepage: 'https://verdaccio.tld', bugs: { url: 'https://verdaccio.tld/bugs', }, dist: { tarball: 'https://verdaccio.tld/download', }, }, })); jest.mock('../../pages/Version', () => ({ DetailContextConsumer: component => { return component.children({ packageMeta: mockPackageMeta() }); }, })); describe(' component', () => { beforeEach(() => { jest.resetModules(); jest.resetAllMocks(); }); test('should render the component in default state', () => { const wrapper = mount(); expect(wrapper.html()).toMatchSnapshot(); }); test('when there is no action bar data', () => { mockPackageMeta.mockImplementation(() => ({ latest: {}, })); const wrapper = mount(); // FIXME: this only renders the DetailContextConsumer, thus // the wrapper will be always empty expect(wrapper.html()).toEqual(''); }); test('when there is no latest property in package meta', () => { mockPackageMeta.mockImplementation(() => ({})); const wrapper = mount(); expect(wrapper.html()).toEqual(''); }); test('when there is a button to download a tarball', () => { mockPackageMeta.mockImplementation(() => ({ latest: { dist: { tarball: 'http://localhost:8080/bootstrap/-/bootstrap-4.3.1.tgz', }, }, })); const wrapper = mount(); expect(wrapper.html()).toMatchSnapshot(); const button = wrapper.find('button'); expect(button).toHaveLength(1); const spy = jest.spyOn(api, 'request'); button.simulate('click'); expect(spy).toHaveBeenCalled(); }); test('when there is a button to open an issue', () => { mockPackageMeta.mockImplementation(() => ({ latest: { bugs: { url: 'https://verdaccio.tld/bugs', }, }, })); const wrapper = mount(); expect(wrapper.html()).toMatchSnapshot(); const button = wrapper.find('button'); expect(button).toHaveLength(1); }); });