Revert "fix: stop user from unenroll after earned the certificate"

This reverts commit a479b7ead6.
This commit is contained in:
leangseu-edx
2023-06-12 11:40:22 -04:00
parent a479b7ead6
commit 5db95b0029
4 changed files with 51 additions and 173 deletions

View File

@@ -1,64 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`CourseCardMenu disable and stop rendering buttons snapshot when no dropdown items exist 1`] = `
<Fragment>
<Dropdown>
<Dropdown.Toggle
alt="Course actions dropdown"
as="IconButton"
iconAs="Icon"
id="course-actions-dropdown-test-card-id"
src={[MockFunction icons.MoreVert]}
variant="primary"
/>
<Dropdown.Menu>
<Dropdown.Item
data-testid="unenrollModalToggle"
disabled={false}
onClick={[MockFunction unenrollShow]}
>
Unenroll
</Dropdown.Item>
<Dropdown.Item
data-testid="emailSettingsModalToggle"
disabled={false}
onClick={[MockFunction emailSettingShow]}
>
Email settings
</Dropdown.Item>
<FacebookShareButton
className="pgn__dropdown-item dropdown-item"
onClick={[MockFunction facebookShareClick]}
resetButtonStyle={false}
title="I'm taking test-course-name online with facebook-social-brand. Check it out!"
url="facebook-share-url"
>
Share to Facebook
</FacebookShareButton>
<TwitterShareButton
className="pgn__dropdown-item dropdown-item"
onClick={[MockFunction twitterShareClick]}
resetButtonStyle={false}
title="I'm taking test-course-name online with twitter-social-brand. Check it out!"
url="twitter-share-url"
>
Share to Twitter
</TwitterShareButton>
</Dropdown.Menu>
</Dropdown>
<UnenrollConfirmModal
cardId="test-card-id"
closeModal={[MockFunction unenrollHide]}
show={false}
/>
<EmailSettingsModal
cardId="test-card-id"
closeModal={[MockFunction emailSettingHide]}
show={false}
/>
</Fragment>
`;
exports[`CourseCardMenu enrolled, share enabled, email setting enable snapshot 1`] = `
<Fragment>
<Dropdown>
@@ -176,3 +117,24 @@ exports[`CourseCardMenu masquerading snapshot 1`] = `
/>
</Fragment>
`;
exports[`CourseCardMenu not enrolled, share disabled, email setting disabled snapshot 1`] = `
<Fragment>
<Dropdown>
<Dropdown.Toggle
alt="Course actions dropdown"
as="IconButton"
iconAs="Icon"
id="course-actions-dropdown-test-card-id"
src={[MockFunction icons.MoreVert]}
variant="primary"
/>
<Dropdown.Menu />
</Dropdown>
<UnenrollConfirmModal
cardId="test-card-id"
closeModal={[MockFunction unenrollHide]}
show={false}
/>
</Fragment>
`;

View File

@@ -25,7 +25,6 @@ export const CourseCardMenu = ({ cardId }) => {
const { isEnrolled, isEmailEnabled } = reduxHooks.useCardEnrollmentData(cardId);
const { twitter, facebook } = reduxHooks.useCardSocialSettingsData(cardId);
const { isMasquerading } = reduxHooks.useMasqueradeData();
const { isEarned } = reduxHooks.useCardCertificateData(cardId);
const handleTwitterShare = reduxHooks.useTrackCourseEvent(
track.socialShare,
cardId,
@@ -41,13 +40,6 @@ export const CourseCardMenu = ({ cardId }) => {
const unenrollModal = useUnenrollData();
const handleToggleDropdown = useHandleToggleDropdown(cardId);
const showUnenrollItem = isEnrolled && !isEarned;
const showDropdown = showUnenrollItem || isEmailEnabled || facebook.isEnabled || twitter.isEnabled;
if (!showDropdown) {
return null;
}
return (
<>
<Dropdown onToggle={handleToggleDropdown}>
@@ -60,7 +52,7 @@ export const CourseCardMenu = ({ cardId }) => {
alt={formatMessage(messages.dropdownAlt)}
/>
<Dropdown.Menu>
{showUnenrollItem && (
{isEnrolled && (
<Dropdown.Item
disabled={isMasquerading}
onClick={unenrollModal.show}

View File

@@ -14,7 +14,6 @@ jest.mock('hooks', () => ({
useCardEnrollmentData: jest.fn(),
useCardSocialSettingsData: jest.fn(),
useMasqueradeData: jest.fn(),
useCardCertificateData: jest.fn(),
useTrackCourseEvent: (_, __, site) => jest.fn().mockName(`${site}ShareClick`),
},
}));
@@ -54,43 +53,17 @@ let wrapper;
let el;
describe('CourseCardMenu', () => {
const mockCourseCardMenu = ({
isEnrolled,
isEmailEnabled,
isMasquerading,
facebook,
twitter,
isEarned,
}) => {
useEmailSettings.mockReturnValueOnce(defaultEmailSettingsModal);
useUnenrollData.mockReturnValueOnce(defaultUnenrollModal);
reduxHooks.useCardCourseData.mockReturnValueOnce({ courseName });
reduxHooks.useCardSocialSettingsData.mockReturnValueOnce({
facebook: {
...defaultSocialShare.facebook,
...facebook,
},
twitter: {
...defaultSocialShare.twitter,
...twitter,
},
});
reduxHooks.useCardEnrollmentData.mockReturnValueOnce({
isEnrolled,
isEmailEnabled,
});
reduxHooks.useMasqueradeData.mockReturnValueOnce({ isMasquerading });
reduxHooks.useCardCertificateData.mockReturnValueOnce({ isEarned });
return shallow(<CourseCardMenu {...props} />);
};
beforeEach(() => {
useEmailSettings.mockReturnValue(defaultEmailSettingsModal);
useUnenrollData.mockReturnValue(defaultUnenrollModal);
reduxHooks.useCardSocialSettingsData.mockReturnValue(defaultSocialShare);
reduxHooks.useCardCourseData.mockReturnValue({ courseName });
reduxHooks.useCardEnrollmentData.mockReturnValue({ isEnrolled: true, isEmailEnabled: true });
reduxHooks.useMasqueradeData.mockReturnValue({ isMasquerading: false });
});
describe('enrolled, share enabled, email setting enable', () => {
beforeEach(() => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
isMasquerading: false,
isEarned: false,
});
wrapper = shallow(<CourseCardMenu {...props} />);
});
test('snapshot', () => {
expect(wrapper).toMatchSnapshot();
@@ -116,84 +89,36 @@ describe('CourseCardMenu', () => {
expect(el.props().disabled).toEqual(false);
});
});
describe('disable and stop rendering buttons', () => {
it('does not render unenroll dropdown item when certificate is already earned', () => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
isMasquerading: false,
isEarned: true,
describe('not enrolled, share disabled, email setting disabled', () => {
beforeEach(() => {
reduxHooks.useCardSocialSettingsData.mockReturnValueOnce({
...defaultSocialShare,
twitter: { ...defaultSocialShare.twitter, isEnabled: false },
facebook: { ...defaultSocialShare.facebook, isEnabled: false },
});
reduxHooks.useCardEnrollmentData.mockReturnValueOnce({ isEnrolled: false, isEmailEnabled: false });
wrapper = shallow(<CourseCardMenu {...props} />);
});
test('snapshot', () => {
expect(wrapper).toMatchSnapshot();
});
it('does not renders share buttons', () => {
expect(wrapper.find('FacebookShareButton').length).toEqual(0);
expect(wrapper.find('TwitterShareButton').length).toEqual(0);
});
it('does not render unenroll modal toggle', () => {
el = wrapper.find({ 'data-testid': 'unenrollModalToggle' });
expect(el.length).toEqual(0);
});
it('does not render unenroll dropdown item when course is not enrolled', () => {
wrapper = mockCourseCardMenu({
isEnrolled: false,
isEmailEnabled: true,
isMasquerading: false,
isEarned: false,
});
el = wrapper.find({ 'data-testid': 'unenrollModalToggle' });
expect(el.length).toEqual(0);
});
it('does not render email settings modal toggle when email is not enabled', () => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: false,
isMasquerading: false,
isEarned: false,
});
it('does not render email settings modal toggle', () => {
el = wrapper.find({ 'data-testid': 'emailSettingsModalToggle' });
expect(el.length).toEqual(0);
});
it('does not render facebook share button when facebook is not enabled', () => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
facebook: {
...defaultSocialShare.facebook,
isEnabled: false,
},
isMasquerading: false,
isEarned: false,
});
el = wrapper.find('FacebookShareButton');
expect(el.length).toEqual(0);
});
it('does not render twitter share button when twitter is not enabled', () => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
twitter: {
...defaultSocialShare.twitter,
isEnabled: false,
},
isMasquerading: false,
isEarned: false,
});
el = wrapper.find('TwitterShareButton');
expect(el.length).toEqual(0);
});
it('snapshot when no dropdown items exist', () => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
isMasquerading: false,
isEarned: false,
});
expect(wrapper).toMatchSnapshot();
expect(wrapper).toEqual({});
});
});
describe('masquerading', () => {
beforeEach(() => {
wrapper = mockCourseCardMenu({
isEnrolled: true,
isEmailEnabled: true,
isMasquerading: true,
isEarned: false,
});
reduxHooks.useMasqueradeData.mockReturnValue({ isMasquerading: true });
wrapper = shallow(<CourseCardMenu {...props} />);
});
test('snapshot', () => {
expect(wrapper).toMatchSnapshot();

View File

@@ -24,7 +24,6 @@ export const courseCard = StrictDict({
isDownloadable: certificate.isDownloadable,
isEarnedButUnavailable: certificate.isEarned && !isAvailable,
isRestricted: certificate.isRestricted,
isEarned: certificate.isEarned,
};
},
),