import { shallow, ShallowWrapper } from 'enzyme'; import { Mock } from 'ts-mockery'; import ShlinkVersions, { ShlinkVersionsProps } from '../../src/common/ShlinkVersions'; import { NonReachableServer, NotFoundServer, ReachableServer } from '../../src/servers/data'; describe('', () => { let wrapper: ShallowWrapper; const createWrapper = (props: ShlinkVersionsProps) => { wrapper = shallow(); return wrapper; }; afterEach(() => wrapper?.unmount()); it.each([ ['1.2.3', Mock.of({ version: '1.0.0', printableVersion: 'foo' }), 'v1.2.3', 'foo'], ['foo', Mock.of({ version: '1.0.0', printableVersion: '1.2.3' }), 'latest', '1.2.3'], ['latest', Mock.of({ version: '1.0.0', printableVersion: 'latest' }), 'latest', 'latest'], ['5.5.0', Mock.of({ version: '1.0.0', printableVersion: '0.2.8' }), 'v5.5.0', '0.2.8'], ['not-semver', Mock.of({ version: '1.0.0', printableVersion: 'some' }), 'latest', 'some'], ])( 'displays expected versions when selected server is reachable', (clientVersion, selectedServer, expectedClientVersion, expectedServerVersion) => { const wrapper = createWrapper({ clientVersion, selectedServer }); const links = wrapper.find('VersionLink'); const serverLink = links.at(0); const clientLink = links.at(1); expect(serverLink.prop('project')).toEqual('shlink'); expect(serverLink.prop('version')).toEqual(expectedServerVersion); expect(clientLink.prop('project')).toEqual('shlink-web-client'); expect(clientLink.prop('version')).toEqual(expectedClientVersion); }, ); it.each([ ['1.2.3', null], ['1.2.3', Mock.of({ serverNotFound: true })], ['1.2.3', Mock.of({ serverNotReachable: true })], ])('displays only client version when selected server is not reachable', (clientVersion, selectedServer) => { const wrapper = createWrapper({ clientVersion, selectedServer }); const links = wrapper.find('VersionLink'); expect(links).toHaveLength(1); expect(links.at(0).prop('project')).toEqual('shlink-web-client'); }); });