diff --git a/src/components/course/course-header/tests/CourseImportantDates.test.jsx b/src/components/course/course-header/tests/CourseImportantDates.test.jsx index a067305df..390d79c78 100644 --- a/src/components/course/course-header/tests/CourseImportantDates.test.jsx +++ b/src/components/course/course-header/tests/CourseImportantDates.test.jsx @@ -23,6 +23,48 @@ jest.mock('react-router-dom', () => ({ useParams: jest.fn(), })); +const futureEarliestExpiration = dayjs().add(5, 'days').toISOString(); +const pastEarliestExpiration = dayjs().subtract(5, 'days').toISOString(); +const now = dayjs().toISOString(); +const mockAllocatedAssignment = ({ + parentContentKey = 'edX+DemoX', + contentKey = 'course-v1:edX+DemoX+2018', + isAssignedCourseRun = true, + earliestPossibleExpiration = { + date: now, + reason: 'subsidy_expired', + }, +}) => ({ + parentContentKey, + contentKey, + isAssignedCourseRun, + earliestPossibleExpiration, +}); + +const mockAllocatedAssignments = [{ + parentContentKey: 'edX+DemoX', + contentKey: 'course-v1:edX+DemoX+2T2020', + isAssignedCourseRun: true, + earliestPossibleExpiration: { + date: dayjs().add(10, 'days').toISOString(), + reason: 'subsidy_expired', + }, +}, +mockAllocatedAssignment({}), +{ + parentContentKey: null, + contentKey: 'edX+DemoX', + isAssignedCourseRun: false, + earliestPossibleExpiration: { + date: dayjs().add(20, 'days').toISOString(), + reason: 'subsidy_expired', + }, +}]; +const mockLearnerContentAssignments = { + allocatedAssignments: mockAllocatedAssignments, + hasAllocatedAssignments: mockAllocatedAssignments.length > 0, +}; + const mockBaseRedeemablePolicies = { redeemablePolicies: [], expiredPolicies: [], @@ -45,6 +87,14 @@ const mockBaseRedeemablePolicies = { }, }; +const mockRedeemablePoliciesWithAllocatedAssignments = { + ...mockBaseRedeemablePolicies, + learnerContentAssignments: { + ...mockBaseRedeemablePolicies.learnerContentAssignments, + ...mockLearnerContentAssignments, + }, +}; + const mockCourseStartDate = dayjs().add(10, 'days').toISOString(); const mockCourseRun = { @@ -91,44 +141,8 @@ describe('', () => { useCourseMetadata.mockReturnValue({ data: mockCourseMetadata }); }); it('renders without crashing', () => { - const earliestExpiration = dayjs().add(5, 'days').toISOString(); - const mockAllocatedAssignments = [{ - parentContentKey: 'edX+DemoX', - contentKey: 'course-v1:edX+DemoX+2T2020', - isAssignedCourseRun: true, - earliestPossibleExpiration: { - date: dayjs().add(10, 'days').toISOString(), - reason: 'subsidy_expired', - }, - }, - { - parentContentKey: 'edX+DemoX', - contentKey: 'course-v1:edX+DemoX+2018', - isAssignedCourseRun: true, - earliestPossibleExpiration: { - date: earliestExpiration, - reason: 'subsidy_expired', - }, - }, { - parentContentKey: null, - contentKey: 'edX+DemoX', - isAssignedCourseRun: false, - earliestPossibleExpiration: { - date: dayjs().add(20, 'days').toISOString(), - reason: 'subsidy_expired', - }, - }]; - const mockLearnerContentAssignments = { - allocatedAssignments: mockAllocatedAssignments, - hasAllocatedAssignments: mockAllocatedAssignments.length > 0, - }; useRedeemablePolicies.mockReturnValue({ - data: { - ...mockBaseRedeemablePolicies, - learnerContentAssignments: { - ...mockBaseRedeemablePolicies.learnerContentAssignments, ...mockLearnerContentAssignments, - }, - }, + data: mockRedeemablePoliciesWithAllocatedAssignments, }); renderWithRouterProvider(); @@ -137,7 +151,37 @@ describe('', () => { expect(screen.getByText('Enroll-by date')).toBeTruthy(); expect(screen.getByText('Course starts')).toBeTruthy(); - expect(screen.getByText(dayjs(earliestExpiration).format(`${DATE_FORMAT} h:mm A`))).toBeTruthy(); + expect(screen.getByText(dayjs(now).format(`${DATE_FORMAT} h:mm A`))).toBeTruthy(); expect(screen.getByText(dayjs(mockCourseStartDate).format(DATE_FORMAT))).toBeTruthy(); }); + it.each([{ + courseStartDate: futureEarliestExpiration, + expected: 'Course starts', + }, + { + courseStartDate: pastEarliestExpiration, + expected: 'Course started', + }])('renders the correct tense based on course start date', ({ + courseStartDate, + expected, + }) => { + const updatedMockCourseRun = { + ...mockCourseRun, + start: courseStartDate, + }; + const updatedMockCourseMetadata = { + ...mockCourseMetadata, + activeCourseRun: updatedMockCourseRun, + courseRuns: [updatedMockCourseRun], + availableCourseRuns: [updatedMockCourseRun], + }; + useRedeemablePolicies.mockReturnValue({ + data: mockRedeemablePoliciesWithAllocatedAssignments, + }); + useCourseMetadata.mockReturnValue({ data: updatedMockCourseMetadata }); + + renderWithRouterProvider(); + + expect(screen.getByText(expected)).toBeTruthy(); + }); });