feat: Exec Education flag around course card menu and actions (#188)

Co-authored-by: jajjibhai008 <ejazofficial122@gmail.com>
This commit is contained in:
Ben Warzeski
2023-08-15 16:27:32 -04:00
committed by GitHub
parent 86a4573405
commit ce269e8c8f
25 changed files with 1813 additions and 1677 deletions

View File

@@ -1,5 +1,6 @@
import { StrictDict } from 'utils';
import { baseAppUrl } from 'data/services/lms/urls';
import { EXECUTIVE_EDUCATION_COURSE_MODES } from 'data/constants/course';
import * as module from './courseCard';
import * as simpleSelectors from './simpleSelectors';
@@ -98,6 +99,7 @@ export const courseCard = StrictDict({
isEmailEnabled: enrollment.isEmailEnabled,
hasOptedOutOfEmail: enrollment.hasOptedOutOfEmail,
mode: enrollment.mode,
isExecEd2UCourse: EXECUTIVE_EDUCATION_COURSE_MODES.includes(enrollment.mode),
};
},
),

View File

@@ -1,5 +1,6 @@
import { keyStore } from 'utils';
import { baseAppUrl } from 'data/services/lms/urls';
import { EXECUTIVE_EDUCATION_COURSE_MODES } from 'data/constants/course';
import simpleSelectors from './simpleSelectors';
import * as module from './courseCard';
@@ -228,23 +229,25 @@ describe('courseCard selectors module', () => {
});
});
describe('enrollment selector', () => {
const defaultData = {
coursewareAccess: {
isStaff: false,
hasUnmetPrereqs: false,
isTooEarly: false,
},
isEnrolled: 'test-is-enrolled',
lastEnrolled: 'test-last-enrolled',
hasStarted: 'test-has-started',
accessExpirationDate: '3000-10-20',
canUpgrade: 'test-can-upgrade',
isAudit: 'test-is-audit',
isAuditAccessExpired: 'test-is-audit-access-expired',
isVerified: 'test-is-verified',
isEmailEnabled: 'test-is-email-enabled',
mode: 'default',
};
beforeEach(() => {
loadSelector(courseCard.enrollment, {
coursewareAccess: {
isStaff: false,
hasUnmetPrereqs: false,
isTooEarly: false,
},
isEnrolled: 'test-is-enrolled',
lastEnrolled: 'test-last-enrolled',
hasStarted: 'test-has-started',
accessExpirationDate: '3000-10-20',
canUpgrade: 'test-can-upgrade',
isAudit: 'test-is-audit',
isAuditAccessExpired: 'test-is-audit-access-expired',
isVerified: 'test-is-verified',
isEmailEnabled: 'test-is-email-enabled',
});
loadSelector(courseCard.enrollment, defaultData);
});
it('returns a card selector based on enrollment cardSimpleSelector', () => {
expect(simpleSelector).toEqual(cardSimpleSelectors.enrollment);
@@ -280,6 +283,13 @@ describe('courseCard selectors module', () => {
it('passes isEmailEnabled', () => {
expect(selected.isEmailEnabled).toEqual(testData.isEmailEnabled);
});
it('returns isExecEd2UCourse: false if mode is not in EXECUTIVE_EDUCATION_COURSE_MODES', () => {
expect(selected.isExecEd2UCourse).toEqual(false);
});
it('returns isExecEd2UCourse: true if mode is in EXECUTIVE_EDUCATION_COURSE_MODES', () => {
loadSelector(courseCard.enrollment, { ...defaultData, mode: EXECUTIVE_EDUCATION_COURSE_MODES[0] });
expect(selected.isExecEd2UCourse).toEqual(true);
});
});
describe('entitlement selector', () => {
beforeEach(() => {

View File

@@ -12,7 +12,7 @@ export const simpleSelectors = StrictDict({
platformSettings: mkSimpleSelector(app => app.platformSettings),
suggestedCourses: mkSimpleSelector(app => app.suggestedCourses),
emailConfirmation: mkSimpleSelector(app => app.emailConfirmation),
enterpriseDashboard: mkSimpleSelector(app => app.enterpriseDashboard),
enterpriseDashboard: mkSimpleSelector(app => app.enterpriseDashboard || {}),
selectSessionModal: mkSimpleSelector(app => app.selectSessionModal),
pageNumber: mkSimpleSelector(app => app.pageNumber),
socialShareSettings: mkSimpleSelector(app => app.socialShareSettings),

View File

@@ -35,6 +35,12 @@ describe('app simple selectors', () => {
expect(preSelectors).toEqual([appSelector]);
expect(cb(testState.app)).toEqual(testString);
});
test('enterpriseDashboard returns empty object if data returns null', () => {
testState = { app: { enterpriseDashboard: null } };
const { preSelectors, cb } = simpleSelectors.enterpriseDashboard;
expect(preSelectors).toEqual([appSelector]);
expect(cb(testState.app)).toEqual({});
});
describe('cardSimpleSelectors', () => {
keys = keyStore(cardSimpleSelectors);
test.each([

View File

@@ -55,6 +55,12 @@ export const useCardSocialSettingsData = (cardId) => {
return { facebook: loadSettings(facebook), twitter: loadSettings(twitter) };
};
export const useCardExecEdTrackingParam = (cardId) => {
const { isExecEd2UCourse } = module.useCardEnrollmentData(cardId);
const { authOrgId } = module.useEnterpriseDashboardData(cardId);
return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';
};
/** Events **/
export const useUpdateSelectSessionModalCallback = (cardId) => {
const dispatch = useDispatch();