Files
frontend-app-learner-dashboard/src/containers/CourseCard/components/hooks.test.js
Jacobo Dominguez 0d2eb96c86 React query and react context conversion (#786)
Migrate from Redux to React Query and React Context.  This modernizes state management while maintaining all existing functionality.  All the redux code and files were removed, including all redux and related packages.
2026-03-03 12:45:57 -03:00

181 lines
5.3 KiB
JavaScript

import { useCourseData, useIsMasquerading } from 'hooks';
import * as hooks from './hooks';
jest.mock('react', () => ({
...jest.requireActual('react'),
useMemo: jest.fn((fn) => fn()),
}));
jest.mock('hooks', () => ({
...jest.requireActual('hooks'),
useCourseData: jest.fn(),
useIsMasquerading: jest.fn(),
}));
const cardId = 'my-test-course-number';
describe('useActionDisabledState', () => {
const defaultData = {
isMasquerading: false,
isEntitlement: false,
isFulfilled: false,
canChange: false,
hasSessions: false,
hasAccess: false,
isAudit: false,
isAuditAccessExpired: false,
resumeUrl: 'resume.url',
homeUrl: 'home.url',
};
const mockHooksData = (args) => {
const {
isMasquerading,
isEntitlement,
isFulfilled,
canChange,
hasSessions,
hasAccess,
isAudit,
isAuditAccessExpired,
resumeUrl,
homeUrl,
availableSessions,
} = { ...defaultData, ...args };
useIsMasquerading.mockReturnValue(isMasquerading);
useCourseData.mockReturnValue({
enrollment: {
hasAccess,
isAudit,
isAuditAccessExpired,
coursewareAccess: {
isStaff: false,
hasUnmetPrereqs: !hasAccess,
isTooEarly: !hasAccess,
},
},
entitlement: isEntitlement ? {
isEntitlement: true,
isFulfilled,
canChange,
hasSessions,
availableSessions,
} : {},
courseRun: {
resumeUrl,
homeUrl,
},
});
};
beforeEach(() => {
jest.clearAllMocks();
});
const runHook = () => hooks.useActionDisabledState(cardId);
describe('disableBeginCourse', () => {
const testDisabled = (data, expected) => {
mockHooksData(data);
expect(runHook().disableBeginCourse).toBe(expected);
};
it('disable when homeUrl is invalid', () => {
testDisabled({ homeUrl: null }, true);
});
it('disable when isMasquerading is true', () => {
testDisabled({ isMasquerading: true }, true);
});
it('disable when hasAccess is false', () => {
testDisabled({ hasAccess: false }, true);
});
it('disable when isAudit is true and isAuditAccessExpired is true', () => {
testDisabled({ isAudit: true, isAuditAccessExpired: true }, true);
});
it('enable when all conditions are met', () => {
testDisabled({ hasAccess: true }, false);
});
});
describe('disableResumeCourse', () => {
const testDisabled = (data, expected) => {
mockHooksData(data);
expect(runHook().disableResumeCourse).toBe(expected);
};
it('disable when resumeUrl is invalid', () => {
testDisabled({ resumeUrl: null }, true);
});
it('disable when isMasquerading is true', () => {
testDisabled({ isMasquerading: true }, true);
});
it('disable when hasAccess is false', () => {
testDisabled({ hasAccess: false }, true);
});
it('disable when isAudit is true and isAuditAccessExpired is true', () => {
testDisabled({ isAudit: true, isAuditAccessExpired: true }, true);
});
it('enable when all conditions are met', () => {
testDisabled({ hasAccess: true }, false);
});
});
describe('disableViewCourse', () => {
const testDisabled = (data, expected) => {
mockHooksData(data);
expect(runHook().disableViewCourse).toBe(expected);
};
it('disable when hasAccess is false', () => {
testDisabled({ hasAccess: false }, true);
});
it('disable when isAudit is true and isAuditAccessExpired is true', () => {
testDisabled({ isAudit: true, isAuditAccessExpired: true }, true);
});
it('enable when all conditions are met', () => {
testDisabled({ hasAccess: true }, false);
});
});
describe('disableSelectSession', () => {
const testDisabled = (data, expected) => {
mockHooksData(data);
expect(runHook().disableSelectSession).toBe(expected);
};
it('disable when isEntitlement is false', () => {
testDisabled({ isEntitlement: false }, true);
});
it('disable when isMasquerading is true', () => {
testDisabled({ isMasquerading: true }, true);
});
it('disable when hasAccess is false', () => {
testDisabled({ hasAccess: false }, true);
});
it('disable when canChange is false', () => {
testDisabled({ canChange: false }, true);
});
it('disable when hasSessions is false', () => {
testDisabled({ hasSessions: false }, true);
});
it('enable when all conditions are met', () => {
testDisabled(
{
isEntitlement: true,
hasAccess: true,
canChange: true,
hasSessions: true,
availableSessions: ['session1'],
},
false,
);
});
});
describe('disableCourseTitle', () => {
const testDisabled = (data, expected) => {
mockHooksData(data);
expect(runHook().disableCourseTitle).toBe(expected);
};
it('disable when isEntitlement is true and isFulfilled is false', () => {
testDisabled({ isEntitlement: true, isFulfilled: false }, true);
});
it('disable when disableViewCourse is true', () => {
testDisabled({ hasAccess: false }, true);
});
it('enable when all conditions are met', () => {
testDisabled({ isEntitlement: true, isFulfilled: true, hasAccess: true }, false);
});
});
});