import { render, screen } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import { reduxHooks } from 'hooks'; import RelatedProgramsModal from '.'; import messages from './messages'; jest.mock('./components/ProgramCard', () => jest.fn(() =>
ProgramCard
)); jest.mock('hooks', () => ({ reduxHooks: { useCardCourseData: jest.fn(), useCardRelatedProgramsData: jest.fn(), }, })); jest.unmock('@openedx/paragon'); jest.unmock('@edx/frontend-platform/i18n'); jest.unmock('react'); const cardId = 'test-card-id'; const courseData = { courseName: 'test course', }; const programData = { list: [ { programUrl: 'program-1-url', programData: { dataFor: 'program1' }, }, { programUrl: 'program-2-url', programData: { dataFor: 'program2' }, }, { programUrl: 'program-3-url', programData: { dataFor: 'program3' }, }, ], }; const props = { isOpen: true, closeModal: jest.fn().mockName('props.closeModal'), cardId, }; describe('RelatedProgramsModal', () => { beforeEach(() => { reduxHooks.useCardCourseData.mockReturnValueOnce(courseData); reduxHooks.useCardRelatedProgramsData.mockReturnValueOnce(programData); }); it('initializes hooks with cardId', () => { render(); expect(reduxHooks.useCardCourseData).toHaveBeenCalledWith(cardId); expect(reduxHooks.useCardRelatedProgramsData).toHaveBeenCalledWith(cardId); }); describe('renders', () => { beforeEach(() => render()); it('display header', () => { const header = screen.getByRole('heading', { name: messages.header.defaultMessage }); expect(header).toBeInTheDocument(); }); it('displays course name', () => { const courseName = screen.getByText(courseData.courseName); expect(courseName).toBeInTheDocument(); }); it('displays description', () => { const description = screen.getByText((text) => text.includes('Are you looking to expand your knowledge?')); expect(description).toBeInTheDocument(); }); it('displays program cards', () => { const programCards = screen.getAllByText('ProgramCard'); expect(programCards.length).toEqual(programData.list.length); }); }); });