import buildShlinkApiClient from '../../../src/utils/services/ShlinkApiClientBuilder'; describe('ShlinkApiClientBuilder', () => { const createBuilder = () => { const builder = buildShlinkApiClient({}); return (selectedServer) => builder(() => ({ selectedServer })); }; it('creates new instances when provided params are different', async () => { const builder = createBuilder(); const [ firstApiClient, secondApiClient, thirdApiClient ] = await Promise.all([ builder({ url: 'foo', apiKey: 'bar' }), builder({ url: 'bar', apiKey: 'bar' }), builder({ url: 'bar', apiKey: 'foo' }), ]); expect(firstApiClient).not.toBe(secondApiClient); expect(firstApiClient).not.toBe(thirdApiClient); expect(secondApiClient).not.toBe(thirdApiClient); }); it('returns existing instances when provided params are the same', async () => { const builder = createBuilder(); const selectedServer = { url: 'foo', apiKey: 'bar' }; const [ firstApiClient, secondApiClient, thirdApiClient ] = await Promise.all([ builder(selectedServer), builder(selectedServer), builder(selectedServer), ]); expect(firstApiClient).toBe(secondApiClient); expect(firstApiClient).toBe(thirdApiClient); expect(secondApiClient).toBe(thirdApiClient); }); it('does not fetch from state when provided param is already selected server', () => { const url = 'url'; const apiKey = 'apiKey'; const apiClient = buildShlinkApiClient({})({ url, apiKey }); expect(apiClient._baseUrl).toEqual(url); expect(apiClient._apiKey).toEqual(apiKey); }); });