Files
frontend-app-learner-dashboard/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.test.js
2023-01-19 10:13:48 -05:00

91 lines
3.3 KiB
JavaScript

import { keyStore } from 'utils';
import { reduxHooks } from 'hooks';
import ApprovedContent from './views/ApprovedContent';
import EligibleContent from './views/EligibleContent';
import MustRequestContent from './views/MustRequestContent';
import PendingContent from './views/PendingContent';
import RejectedContent from './views/RejectedContent';
import * as hooks from './hooks';
jest.mock('hooks', () => ({
reduxHooks: {
useCardCreditData: jest.fn(),
usePlatformSettingsData: jest.fn(),
},
}));
jest.mock('./views/ApprovedContent', () => 'ApprovedContent');
jest.mock('./views/EligibleContent', () => 'EligibleContent');
jest.mock('./views/MustRequestContent', () => 'MustRequestContent');
jest.mock('./views/PendingContent', () => 'PendingContent');
jest.mock('./views/RejectedContent', () => 'RejectedContent');
const cardId = 'test-card-id';
const statuses = keyStore(hooks.statusComponents);
const supportEmail = 'test-support-email';
let out;
const defaultProps = {
isEligible: true,
error: false,
isPurchased: false,
requestStatus: null,
};
const loadHook = (creditData = {}) => {
reduxHooks.useCardCreditData.mockReturnValue({ ...defaultProps, ...creditData });
out = hooks.useCreditBannerData(cardId);
};
describe('useCreditBannerData hook', () => {
beforeEach(() => {
reduxHooks.usePlatformSettingsData.mockReturnValue({ supportEmail });
});
it('loads card credit data with cardID and loads platform settings data', () => {
loadHook({ isEligible: false });
expect(reduxHooks.useCardCreditData).toHaveBeenCalledWith(cardId);
expect(reduxHooks.usePlatformSettingsData).toHaveBeenCalledWith();
});
describe('non-credit-eligible learner', () => {
it('returns null if the learner is not credit eligible', () => {
loadHook({ isEligible: false });
expect(out).toEqual(null);
});
});
describe('credit-eligible learner', () => {
it('returns error object from credit', () => {
loadHook();
expect(out.error).toEqual(defaultProps.error);
loadHook({ error: true });
expect(out.error).toEqual(true);
});
describe('ContentComponent', () => {
it('returns EligibleContent if not purchased', () => {
loadHook();
expect(out.ContentComponent).toEqual(EligibleContent);
});
it('returns MustRequestContent if purchased but not requested', () => {
loadHook({ purchased: true });
expect(out.ContentComponent).toEqual(MustRequestContent);
});
it('returns PendingContent if purchased and request is pending', () => {
loadHook({ purchased: true, requestStatus: statuses.pending });
expect(out.ContentComponent).toEqual(PendingContent);
});
it('returns ApprovedContent if purchased and request is approved', () => {
loadHook({ purchased: true, requestStatus: statuses.approved });
expect(out.ContentComponent).toEqual(ApprovedContent);
});
it('returns RejectedContent if purchased and request is rejected', () => {
loadHook({ purchased: true, requestStatus: statuses.rejected });
expect(out.ContentComponent).toEqual(RejectedContent);
});
it('returns EligibleContent if purchased and request status is invalid', () => {
loadHook({ purchased: true, requestStatus: 'fake-status' });
expect(out.ContentComponent).toEqual(EligibleContent);
});
});
});
});