96 lines
3.9 KiB
JavaScript
96 lines
3.9 KiB
JavaScript
import { render, screen } from '@testing-library/react';
|
|
import { reduxHooks } from '@src/hooks';
|
|
|
|
import CourseCardActions from '.';
|
|
|
|
jest.mock('@src/hooks', () => ({
|
|
reduxHooks: {
|
|
useCardCourseRunData: jest.fn(),
|
|
useCardEnrollmentData: jest.fn(),
|
|
useCardEntitlementData: jest.fn(),
|
|
useMasqueradeData: jest.fn(),
|
|
},
|
|
}));
|
|
|
|
jest.mock('@src/slots/CourseCardActionSlot', () => jest.fn(() => <div>CourseCardActionSlot</div>));
|
|
jest.mock('./SelectSessionButton', () => jest.fn(() => <div>SelectSessionButton</div>));
|
|
jest.mock('./ViewCourseButton', () => jest.fn(() => <div>ViewCourseButton</div>));
|
|
jest.mock('./BeginCourseButton', () => jest.fn(() => <div>BeginCourseButton</div>));
|
|
jest.mock('./ResumeButton', () => jest.fn(() => <div>ResumeButton</div>));
|
|
|
|
const cardId = 'test-card-id';
|
|
const props = { cardId };
|
|
|
|
describe('CourseCardActions', () => {
|
|
const mockHooks = ({
|
|
isEntitlement = false,
|
|
isExecEd2UCourse = false,
|
|
isFulfilled = false,
|
|
isArchived = false,
|
|
isVerified = false,
|
|
hasStarted = false,
|
|
isMasquerading = false,
|
|
} = {}) => {
|
|
reduxHooks.useCardEntitlementData.mockReturnValueOnce({ isEntitlement, isFulfilled });
|
|
reduxHooks.useCardCourseRunData.mockReturnValueOnce({ isArchived });
|
|
reduxHooks.useCardEnrollmentData.mockReturnValueOnce({ isExecEd2UCourse, isVerified, hasStarted });
|
|
reduxHooks.useMasqueradeData.mockReturnValueOnce({ isMasquerading });
|
|
};
|
|
const renderComponent = () => render(<CourseCardActions {...props} />);
|
|
describe('hooks', () => {
|
|
it('initializes redux hooks', () => {
|
|
mockHooks();
|
|
renderComponent();
|
|
expect(reduxHooks.useCardEntitlementData).toHaveBeenCalledWith(cardId);
|
|
expect(reduxHooks.useCardEnrollmentData).toHaveBeenCalledWith(cardId);
|
|
expect(reduxHooks.useCardCourseRunData).toHaveBeenCalledWith(cardId);
|
|
});
|
|
});
|
|
describe('output', () => {
|
|
describe('entitlement course', () => {
|
|
it('renders ViewCourseButton if fulfilled', () => {
|
|
mockHooks({ isEntitlement: true, isFulfilled: true });
|
|
renderComponent();
|
|
const ViewCourseButton = screen.getByText('ViewCourseButton');
|
|
expect(ViewCourseButton).toBeInTheDocument();
|
|
});
|
|
it('renders SelectSessionButton if not fulfilled', () => {
|
|
mockHooks({ isEntitlement: true });
|
|
renderComponent();
|
|
const SelectSessionButton = screen.getByText('SelectSessionButton');
|
|
expect(SelectSessionButton).toBeInTheDocument();
|
|
});
|
|
});
|
|
describe('not entitlement, verified, or exec ed', () => {
|
|
it('renders CourseCardActionSlot and ViewCourseButton for archived courses', () => {
|
|
mockHooks({ isArchived: true });
|
|
renderComponent();
|
|
const CourseCardActionSlot = screen.getByText('CourseCardActionSlot');
|
|
expect(CourseCardActionSlot).toBeInTheDocument();
|
|
const ViewCourseButton = screen.getByText('ViewCourseButton');
|
|
expect(ViewCourseButton).toBeInTheDocument();
|
|
});
|
|
describe('unstarted courses', () => {
|
|
it('renders CourseCardActionSlot and BeginCourseButton', () => {
|
|
mockHooks();
|
|
renderComponent();
|
|
const CourseCardActionSlot = screen.getByText('CourseCardActionSlot');
|
|
expect(CourseCardActionSlot).toBeInTheDocument();
|
|
const BeginCourseButton = screen.getByText('BeginCourseButton');
|
|
expect(BeginCourseButton).toBeInTheDocument();
|
|
});
|
|
});
|
|
describe('active courses (started, and not archived)', () => {
|
|
it('renders CourseCardActionSlot and ResumeButton', () => {
|
|
mockHooks({ hasStarted: true });
|
|
renderComponent();
|
|
const CourseCardActionSlot = screen.getByText('CourseCardActionSlot');
|
|
expect(CourseCardActionSlot).toBeInTheDocument();
|
|
const ResumeButton = screen.getByText('ResumeButton');
|
|
expect(ResumeButton).toBeInTheDocument();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|