@@ -1,10 +1,9 @@
|
||||
import { StrictDict } from 'utils';
|
||||
import urls from 'data/services/lms/urls';
|
||||
import { baseAppUrl, learningMfeUrl } from 'data/services/lms/urls';
|
||||
|
||||
import * as module from './courseCard';
|
||||
import * as simpleSelectors from './simpleSelectors';
|
||||
|
||||
const { baseAppUrl, learningMfeUrl } = urls;
|
||||
const { cardSimpleSelectors, mkCardSelector } = simpleSelectors;
|
||||
|
||||
const today = new Date();
|
||||
@@ -21,7 +20,7 @@ export const courseCard = StrictDict({
|
||||
const isAvailable = availableDate <= new Date();
|
||||
return {
|
||||
availableDate,
|
||||
certPreviewUrl: certificate.certPreviewUrl,
|
||||
certPreviewUrl: baseAppUrl(certificate.certPreviewUrl),
|
||||
isDownloadable: certificate.isDownloadable,
|
||||
isEarnedButUnavailable: certificate.isEarned && !isAvailable,
|
||||
isRestricted: certificate.isRestricted,
|
||||
@@ -96,7 +95,11 @@ export const courseCard = StrictDict({
|
||||
}
|
||||
const deadline = new Date(entitlement.changeDeadline);
|
||||
const deadlinePassed = deadline < today;
|
||||
const showExpirationWarning = !deadlinePassed && deadline <= dateSixMonthsFromNow;
|
||||
const showExpirationWarning = (
|
||||
!entitlement.isFulfilled
|
||||
&& !deadlinePassed
|
||||
&& deadline <= dateSixMonthsFromNow
|
||||
);
|
||||
return {
|
||||
isEntitlement: true,
|
||||
|
||||
|
||||
@@ -84,11 +84,13 @@ describe('courseCard selectors module', () => {
|
||||
it('passes availableDate, converted to a date', () => {
|
||||
expect(selected.availableDate).toMatchObject(new Date(testData.availableDate));
|
||||
});
|
||||
it('passes [certPreviewUrl, isDownloadable, isRestricted]', () => {
|
||||
expect(selected.certPreviewUrl).toEqual(testData.certPreviewUrl);
|
||||
it('passes [isDownloadable, isRestricted]', () => {
|
||||
expect(selected.isDownloadable).toEqual(testData.isDownloadable);
|
||||
expect(selected.isRestricted).toEqual(testData.isRestricted);
|
||||
});
|
||||
it('passes certPreviewUrl as app url', () => {
|
||||
expect(selected.certPreviewUrl).toEqual(baseAppUrl(testData.certPreviewUrl));
|
||||
});
|
||||
describe('isEarnedButUnavailable', () => {
|
||||
it('passes true iff certificate is earned but availableDate is in the future', () => {
|
||||
const testSelector = (data, expected) => {
|
||||
@@ -278,16 +280,16 @@ describe('courseCard selectors module', () => {
|
||||
expect(selector({ ...testData, changeDeadline: dates.yesterday }).canChange).toEqual(false);
|
||||
expect(selector({ ...testData, changeDeadline: dates.tomorrow }).canChange).toEqual(true);
|
||||
});
|
||||
it('passes showExpirationWarning if the deadline is 0-6 months in the future', () => {
|
||||
expect(
|
||||
selector({ ...testData, changeDeadline: dates.yesterday }).showExpirationWarning,
|
||||
).toEqual(false);
|
||||
expect(
|
||||
selector({ ...testData, changeDeadline: dates.tomorrow }).showExpirationWarning,
|
||||
).toEqual(true);
|
||||
expect(
|
||||
selector({ ...testData, changeDeadline: dates.nextYear }).showExpirationWarning,
|
||||
).toEqual(false);
|
||||
it('passes showExpirationWarning if the deadline is 0-6 months in the future and not fulfilled', () => {
|
||||
const testSelector = ({ isFulfilled, changeDeadline }, expected) => {
|
||||
expect(
|
||||
selector({ ...testData, isFulfilled, changeDeadline }).showExpirationWarning,
|
||||
).toEqual(expected);
|
||||
};
|
||||
testSelector({ isFulfilled: false, changeDeadline: dates.yesterday }, false);
|
||||
testSelector({ isFulfilled: false, changeDeadline: dates.tomorrow }, true);
|
||||
testSelector({ isFulfilled: false, changeDeadline: dates.nextYear }, false);
|
||||
testSelector({ isFulfilled: true, changeDeadline: dates.nextYear }, false);
|
||||
});
|
||||
});
|
||||
describe('gradeData selector', () => {
|
||||
|
||||
@@ -64,4 +64,5 @@ export const useUpdateSelectSessionModalCallback = (dispatch, cardId) => () => d
|
||||
|
||||
export const useMasqueradeData = () => useSelector(requestSelectors.masquerade);
|
||||
|
||||
export const useIsPendingRequest = (requestName) => useSelector(requestSelectors.isPending(requestName));
|
||||
export const useRequestIsPending = (requestName) => useSelector(requestSelectors.isPending(requestName));
|
||||
export const useRequestIsFailed = (requestName) => useSelector(requestSelectors.isFailed(requestName));
|
||||
|
||||
@@ -12,8 +12,10 @@ const courseUnenroll = `${baseUrl}/change_enrollment`;
|
||||
const updateEmailSettings = `${api}/change_email_settings`;
|
||||
const entitlementEnrollment = (uuid) => `${api}/entitlements/v1/entitlements/${uuid}/enrollments`;
|
||||
|
||||
const baseAppUrl = (url) => baseUrl + url;
|
||||
const learningMfeUrl = (url) => configuration.LEARNING_MICROFRONTEND_URL + url;
|
||||
const isAbsoluteUrl = (url) => url.startsWith('http://') || url.startsWith('https://');
|
||||
|
||||
export const baseAppUrl = (url) => (isAbsoluteUrl(url) ? url : baseUrl + url);
|
||||
export const learningMfeUrl = (url) => (isAbsoluteUrl(url) ? url : configuration.LEARNING_MICROFRONTEND_URL + url);
|
||||
|
||||
// static view url
|
||||
const programsUrl = baseAppUrl('/dashboard/programs');
|
||||
|
||||
Reference in New Issue
Block a user