77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
import { useIntl } from '@openedx/frontend-base';
|
|
|
|
import { MockUseState } from 'testUtils';
|
|
import { reduxHooks } from 'hooks';
|
|
|
|
import * as hooks from './hooks';
|
|
import messages from './messages';
|
|
|
|
jest.mock('hooks', () => ({
|
|
reduxHooks: {
|
|
useCardRelatedProgramsData: jest.fn(),
|
|
},
|
|
}));
|
|
|
|
const cardId = 'test-card-id';
|
|
|
|
const state = new MockUseState(hooks);
|
|
const numPrograms = 27;
|
|
|
|
describe('RelatedProgramsBadge hooks', () => {
|
|
const { formatMessage } = useIntl();
|
|
let out;
|
|
describe('state values', () => {
|
|
state.testGetter(state.keys.isOpen);
|
|
});
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
describe('useRelatedProgramsBadgeData', () => {
|
|
beforeEach(() => {
|
|
state.mock();
|
|
reduxHooks.useCardRelatedProgramsData.mockReturnValueOnce({
|
|
length: numPrograms,
|
|
});
|
|
out = hooks.useRelatedProgramsBadgeData({ cardId });
|
|
});
|
|
afterEach(state.restore);
|
|
|
|
test('openModal sets isOpen to true as useCallback', () => {
|
|
out.openModal();
|
|
expect(state.setState.isOpen).toHaveBeenCalledWith(true);
|
|
});
|
|
|
|
test('closeModal sets isOpen to false as useCallback', () => {
|
|
out.closeModal();
|
|
expect(state.setState.isOpen).toHaveBeenCalledWith(false);
|
|
});
|
|
|
|
test('isOpen returns state value for isOpen', () => {
|
|
expect(out.isOpen).toEqual(state.stateVals.isOpen);
|
|
});
|
|
|
|
test('forwards numPrograms from relatedPrograms.length for the cardId', () => {
|
|
expect(out.numPrograms).toEqual(numPrograms);
|
|
});
|
|
test('returns empty programsMessage if no programs', () => {
|
|
reduxHooks.useCardRelatedProgramsData.mockReturnValueOnce({ length: 0 });
|
|
out = hooks.useRelatedProgramsBadgeData({ cardId });
|
|
expect(out.programsMessage).toEqual('');
|
|
});
|
|
test('returns badgeLabelSingular programsMessage if 1 programs', () => {
|
|
reduxHooks.useCardRelatedProgramsData.mockReturnValueOnce({ length: 1 });
|
|
out = hooks.useRelatedProgramsBadgeData({ cardId });
|
|
expect(out.programsMessage).toEqual(formatMessage(
|
|
messages.badgeLabelSingular,
|
|
{ numPrograms: 1 },
|
|
));
|
|
});
|
|
test('returns badgeLabelSingular programsMessage if multiple programs', () => {
|
|
expect(out.programsMessage).toEqual(formatMessage(
|
|
messages.badgeLabelPlural,
|
|
{ numPrograms },
|
|
));
|
|
});
|
|
});
|
|
});
|