Skip to content

Commit

Permalink
more AppOrderProvider tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnC-80 committed Jan 30, 2025
1 parent 0c6e189 commit 1d2a3dc
Showing 1 changed file with 283 additions and 5 deletions.
288 changes: 283 additions & 5 deletions src/components/MainNav/AppOrderProvider.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jest.mock('../../ModulesContext', () => ({
useModules: jest.fn(() => mockUseModules())
}));

const mockGetPreference = jest.fn(() => [{ name: 'settings' }]);
const mockGetPreference = jest.fn(() => {});
const mockSetPreference = jest.fn();
const mockRemovePreference = jest.fn();
jest.mock('../../hooks/usePreferences', () => ({
Expand Down Expand Up @@ -67,6 +67,219 @@ const wrapper = ({ children }) => (
</LastVisitedContext.Provider>
);


// apps as per stripes-config...
const testAppModules = [
{
displayName: 'Invoices',
route: '/invoice',
queryResource: 'query',
module: '@folio/invoice',
description: 'Invoice',
version: '6.1.1090000001259'
},
{
handlerName: 'eventHandler',
displayName: 'Agreements',
route: '/erm',
home: '/erm/agreements',
queryResource: 'query',
module: '@folio/agreements',
description: 'ERM agreement functionality for Stripes',
version: '11.2.109900000000321'
},
{
displayName: 'Bulk edit',
route: '/bulk-edit',
home: '/bulk-edit',
module: '@folio/bulk-edit',
description: 'Description for bulk edit',
version: '4.2.2090000003517'
},
{
displayName: 'Check in',
route: '/checkin',
queryResource: 'query',
module: '@folio/checkin',
description: 'Item Check-in',
version: '9.3.109000000926'
}
];

// default order - same as config.
const testOrderedNoPref = [
{
id: 'clickable-invoice-module',
href: '/invoice',
active: false,
name: 'invoice',
displayName: 'Invoices',
route: '/invoice',
queryResource: 'query',
module: '@folio/invoice',
description: 'Invoice',
version: '6.1.1090000001259'
},
{
id: 'clickable-agreements-module',
href: '/erm/agreements',
active: false,
name: 'agreements',
handlerName: 'eventHandler',
displayName: 'Agreements',
route: '/erm',
home: '/erm/agreements',
queryResource: 'query',
module: '@folio/agreements',
description: 'ERM agreement functionality for Stripes',
version: '11.2.109900000000321'
},
{
id: 'clickable-bulk-edit-module',
href: '/bulk-edit',
active: false,
name: 'bulk-edit',
displayName: 'Bulk edit',
route: '/bulk-edit',
home: '/bulk-edit',
module: '@folio/bulk-edit',
description: 'Description for bulk edit',
version: '4.2.2090000003517'
},
{
id: 'clickable-checkin-module',
href: '/checkin',
active: false,
name: 'checkin',
displayName: 'Check in',
route: '/checkin',
queryResource: 'query',
module: '@folio/checkin',
description: 'Item Check-in',
version: '9.3.109000000926'
},
{
displayName: 'stripes-core.settings',
name: 'settings',
id: 'clickable-settings',
href: '/settings',
active: false,
description: 'FOLIO settings',
iconData: {
src: {},
alt: 'Tenant Settings',
title: 'Settings'
},
route: '/settings'
}
];

// default order preference (value that's derived when no user preferred order is present) - same order as config.
const testPreferencedOrderNoPref = [
{
name: 'invoice',
},
{
name: 'agreements',
},
{
name: 'bulk-edit',
},
{
name: 'checkin',
},
{
name: 'settings',
}
];

// order changed via prefs to move 'checkin' to the start of the list...
const testOrderedWithPref = [
{
id: 'clickable-checkin-module',
href: '/checkin',
active: false,
name: 'checkin',
displayName: 'Check in',
route: '/checkin',
queryResource: 'query',
module: '@folio/checkin',
description: 'Item Check-in',
version: '9.3.109000000926'
},
{
id: 'clickable-invoice-module',
href: '/invoice',
active: false,
name: 'invoice',
displayName: 'Invoices',
route: '/invoice',
queryResource: 'query',
module: '@folio/invoice',
description: 'Invoice',
version: '6.1.1090000001259'
},
{
id: 'clickable-agreements-module',
href: '/erm/agreements',
active: false,
name: 'agreements',
handlerName: 'eventHandler',
displayName: 'Agreements',
route: '/erm',
home: '/erm/agreements',
queryResource: 'query',
module: '@folio/agreements',
description: 'ERM agreement functionality for Stripes',
version: '11.2.109900000000321'
},
{
id: 'clickable-bulk-edit-module',
href: '/bulk-edit',
active: false,
name: 'bulk-edit',
displayName: 'Bulk edit',
route: '/bulk-edit',
home: '/bulk-edit',
module: '@folio/bulk-edit',
description: 'Description for bulk edit',
version: '4.2.2090000003517'
},
{
displayName: 'stripes-core.settings',
name: 'settings',
id: 'clickable-settings',
href: '/settings',
active: false,
description: 'FOLIO settings',
iconData: {
src: {},
alt: 'Tenant Settings',
title: 'Settings'
},
route: '/settings'
}
];

// order changed to move 'checkin' to the start of the list...
const testPreferencedOrderWithPref = [
{
name: 'checkin',
},
{
name: 'invoice',
},
{
name: 'agreements',
},
{
name: 'bulk-edit',
},
{
name: 'settings',
}
];

describe('AppOrderProvider', () => {
let renderedHook;
const settingsOnly = [{
Expand All @@ -84,11 +297,76 @@ describe('AppOrderProvider', () => {
route: '/settings',
}];

beforeAll(async () => {
renderedHook = await act(() => renderHook(() => useAppOrderContext(), { wrapper }));
describe('with no modules', () => {
beforeAll(async () => {
renderedHook = await act(() => renderHook(() => useAppOrderContext(), { wrapper }));
});

it('provides a settings-only list', () => {
expect(renderedHook.result.current.apps).toEqual(settingsOnly);
});

it('provides preference sorted list (no preference, just default)', () => {
expect(renderedHook.result.current.appNavOrder).toEqual([{ name: 'settings' }]);
});

it('provides pref loading status', () => {
expect(renderedHook.result.current.isLoading).toBeDefined();
});

it('provides update function', () => {
expect(renderedHook.result.current.updateList).toBeInstanceOf(Function);
});

it('provides reset function', () => {
expect(renderedHook.result.current.reset).toBeInstanceOf(Function);
});
});

describe('with some modules, no preference', () => {
beforeAll(async () => {
mockUseModules.mockImplementation(() => ({
app: testAppModules
}));
renderedHook = await act(() => renderHook(() => useAppOrderContext(), { wrapper }));
});

it('provides a settings-only list', () => {
expect(renderedHook.result.current.apps).toEqual(testOrderedNoPref);
});

it('provides preference sorted list (no preference, just default)', () => {
expect(renderedHook.result.current.appNavOrder).toEqual(testPreferencedOrderNoPref);
});
});

it('provides sorted app list', () => {
expect(renderedHook.result.current.apps).toEqual(settingsOnly);
describe('with some modules, preferenceOrder', () => {
beforeAll(async () => {
mockGetPreference.mockImplementation(() => testPreferencedOrderWithPref);
mockUseModules.mockImplementation(() => ({
app: testAppModules
}));
renderedHook = await act(() => renderHook(() => useAppOrderContext(), { wrapper }));
});

it('provides a settings-only list', () => {
expect(renderedHook.result.current.apps).toEqual(testOrderedWithPref);
});

it('provides preference sorted list (no preference, just default)', () => {
expect(renderedHook.result.current.appNavOrder).toEqual(testPreferencedOrderWithPref);
});

describe('interaction with preferences', () => {
it('calling updateList calls the setPreference function', () =>{

Check failure on line 361 in src/components/MainNav/AppOrderProvider.test.js

View workflow job for this annotation

GitHub Actions / ui / Install and lint / Install and lint

Missing space after =>
renderedHook.result.current.updateList([{ name: 'settings' }]);
expect(mockSetPreference).toHaveBeenCalled();
});

it('calling updateList calls the setPreference function', () =>{

Check failure on line 366 in src/components/MainNav/AppOrderProvider.test.js

View workflow job for this annotation

GitHub Actions / ui / Install and lint / Install and lint

Missing space after =>
renderedHook.result.current.reset();
expect(mockRemovePreference).toHaveBeenCalled();
});
});
});
});

0 comments on commit 1d2a3dc

Please sign in to comment.