diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ea299f8..99d023b3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 10.1.0 IN PROGRESS +* Provide optional tenant argument to `useOkapiKy` hook. Refs STCOR-747. + ## [10.0.0](https://github.com/folio-org/stripes-core/tree/v10.0.0) (2023-10-11) [Full Changelog](https://github.com/folio-org/stripes-core/compare/v9.0.0...v10.0.0) diff --git a/src/useOkapiKy.js b/src/useOkapiKy.js index c0bcda1c8..669ba7d6f 100644 --- a/src/useOkapiKy.js +++ b/src/useOkapiKy.js @@ -1,8 +1,8 @@ import ky from 'ky'; import { useStripes } from './StripesContext'; -export default () => { - const { locale = 'en', timeout = 30000, tenant, token, url } = useStripes().okapi; +export default (tenant) => { + const { locale = 'en', timeout = 30000, tenant: currentTenant, token, url } = useStripes().okapi; return ky.create({ prefixUrl: url, @@ -10,7 +10,7 @@ export default () => { beforeRequest: [ request => { request.headers.set('Accept-Language', locale); - request.headers.set('X-Okapi-Tenant', tenant); + request.headers.set('X-Okapi-Tenant', tenant ?? currentTenant); request.headers.set('X-Okapi-Token', token); } ] diff --git a/src/useOkapiKy.test.js b/src/useOkapiKy.test.js new file mode 100644 index 000000000..41fbc71a2 --- /dev/null +++ b/src/useOkapiKy.test.js @@ -0,0 +1,86 @@ +import ky from 'ky'; +import { renderHook, waitFor } from '@folio/jest-config-stripes/testing-library/react'; + +import { useStripes } from './StripesContext'; +import useOkapiKy from './useOkapiKy'; + +jest.mock('./StripesContext'); +jest.mock('ky', () => ({ + create: ({ ...av }) => av, +})); + +describe('useOkapiKy', () => { + it('pulls values from stripes object', async () => { + const okapi = { + locale: 'klingon', + tenant: 'tenant', + timeout: 271828, + token: 'token', + url: 'https://whatever.com' + }; + + const mockUseStripes = useStripes; + mockUseStripes.mockReturnValue({ okapi }); + + const r = { + headers: { + set: jest.fn(), + } + }; + + const { result } = renderHook(() => useOkapiKy()); + result.current.hooks.beforeRequest[0](r); + + expect(result.current.prefixUrl).toBe(okapi.url); + expect(result.current.timeout).toBe(okapi.timeout); + + expect(r.headers.set).toHaveBeenCalledWith('Accept-Language', okapi.locale); + expect(r.headers.set).toHaveBeenCalledWith('X-Okapi-Tenant', okapi.tenant); + expect(r.headers.set).toHaveBeenCalledWith('X-Okapi-Token', okapi.token); + }); + + it('provides default values if stripes lacks them', async () => { + const okapi = {}; + + const mockUseStripes = useStripes; + mockUseStripes.mockReturnValue({ okapi }); + + const r = { + headers: { + set: jest.fn(), + } + }; + + const { result } = renderHook(() => useOkapiKy()); + result.current.hooks.beforeRequest[0](r); + + expect(result.current.timeout).toBe(30000); + + expect(r.headers.set).toHaveBeenCalledWith('Accept-Language', 'en'); + }); + + it('overrides tenant', async () => { + const okapi = { + tenant: 'tenant', + timeout: 271828, + token: 'token', + url: 'https://whatever.com' + }; + + const mockUseStripes = useStripes; + mockUseStripes.mockReturnValue({ okapi }); + + const r = { + headers: { + set: jest.fn(), + } + }; + + const { result } = renderHook(() => useOkapiKy('monkey')); + result.current.hooks.beforeRequest[0](r); + + expect(r.headers.set).toHaveBeenCalledWith('X-Okapi-Tenant', 'monkey'); + }); +}); + +