Skip to content

Commit e052c02

Browse files
committed
fix: design improvements and unit tests
1 parent e876c93 commit e052c02

File tree

8 files changed

+32
-44
lines changed

8 files changed

+32
-44
lines changed

src/containers/UnenrollConfirmModal/components/ConfirmPane.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3+
import { reduxHooks } from 'hooks';
34

45
import { useIntl } from '@edx/frontend-platform/i18n';
56
import {
@@ -10,14 +11,17 @@ import {
1011
import messages from './messages';
1112

1213
export const ConfirmPane = ({
14+
cardId,
1315
handleClose,
1416
handleConfirm,
1517
}) => {
1618
const { formatMessage } = useIntl();
19+
const { courseName } = reduxHooks.useCardCourseData(cardId);
20+
const courseTitle = <span className="font-italic">{courseName}</span>;
1721
return (
1822
<>
1923
<h4>{formatMessage(messages.confirmHeader)}</h4>
20-
<p className="py-2">{formatMessage(messages.confirmText)}</p>
24+
<p className="py-2">{formatMessage(messages.confirmText, { courseTitle })}</p>
2125
<ActionRow>
2226
<Button variant="tertiary" onClick={handleClose}>
2327
{formatMessage(messages.confirmCancel)}
@@ -32,6 +36,7 @@ export const ConfirmPane = ({
3236
ConfirmPane.propTypes = {
3337
handleClose: PropTypes.func.isRequired,
3438
handleConfirm: PropTypes.func.isRequired,
39+
cardId: PropTypes.string.isRequired,
3540
};
3641

3742
export default ConfirmPane;

src/containers/UnenrollConfirmModal/components/ConfirmPane.test.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { ConfirmPane } from './ConfirmPane';
66
import messages from './messages';
77

88
const props = {
9+
cardId: 'cardId',
910
handleClose: jest.fn().mockName('props.handleClose'),
1011
handleConfirm: jest.fn().mockName('props.handleConfirm'),
1112
};

src/containers/UnenrollConfirmModal/components/FinishedPane.jsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3+
import { reduxHooks } from 'hooks';
34

45
import { useIntl } from '@edx/frontend-platform/i18n';
56
import {
@@ -10,16 +11,18 @@ import {
1011
import messages from './messages';
1112

1213
export const FinishedPane = ({
13-
gaveReason,
14+
cardId,
1415
handleClose,
1516
}) => {
1617
const { formatMessage } = useIntl();
18+
const { courseName } = reduxHooks.useCardCourseData(cardId);
19+
const courseTitle = <span className="font-italic">{courseName}</span>;
20+
1721
return (
1822
<>
1923
<h4>{formatMessage(messages.finishHeading)}</h4>
2024
<p>
21-
{gaveReason && formatMessage(messages.finishThanksText)}
22-
{formatMessage(messages.finishText)}
25+
{formatMessage(messages.finishText, { courseTitle })}
2326
</p>
2427
<ActionRow>
2528
<Button onClick={handleClose}>{formatMessage(messages.finishReturn)}</Button>
@@ -29,7 +32,7 @@ export const FinishedPane = ({
2932
};
3033
FinishedPane.propTypes = {
3134
handleClose: PropTypes.func.isRequired,
32-
gaveReason: PropTypes.bool.isRequired,
35+
cardId: PropTypes.string.isRequired,
3336
};
3437

3538
export default FinishedPane;

src/containers/UnenrollConfirmModal/components/FinishedPane.test.jsx

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { FinishedPane } from './FinishedPane';
66
import messages from './messages';
77

88
const props = {
9-
gaveReason: true,
9+
cardId: 'cardId',
1010
handleClose: jest.fn().mockName('props.handleClose'),
1111
};
1212

@@ -25,22 +25,8 @@ describe('UnenrollConfirmModal FinishedPane', () => {
2525
expect(returnButton).toBeInTheDocument();
2626
});
2727
it('Gave reason, display thanks message', () => {
28-
const thanksMsg = screen.getByText((text) => text.includes('Thank you'));
28+
const thanksMsg = screen.getByText((text) => text.includes('Unenrollment Successful'));
2929
expect(thanksMsg).toBeInTheDocument();
30-
expect(thanksMsg.innerHTML).toContain(formatMessage(messages.finishThanksText));
31-
});
32-
});
33-
describe('Did not give reason', () => {
34-
it('Does not display thanks message', () => {
35-
const customProps = {
36-
gaveReason: false,
37-
handleClose: jest.fn().mockName('props.handleClose'),
38-
};
39-
render(<IntlProvider locale="en"><FinishedPane {...customProps} /></IntlProvider>);
40-
const thanksMsg = screen.queryByText((text) => text.includes('Thank you'));
41-
expect(thanksMsg).toBeNull();
42-
const finishMsg = screen.getByText(formatMessage(messages.finishText));
43-
expect(finishMsg).toBeInTheDocument();
4430
});
4531
});
4632
});

src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ describe('UnenrollConfirmModal ReasonPane', () => {
2828
render(<IntlProvider locale="en"><ReasonPane {...props} /></IntlProvider>);
2929
const radioButtons = screen.getAllByRole('radio');
3030
expect(radioButtons).toBeDefined();
31-
expect(radioButtons.length).toBe(10);
31+
expect(radioButtons.length).toBe(11);
3232
});
33-
it('render skip button', () => {
33+
it('render cancel button', () => {
3434
render(<IntlProvider locale="en"><ReasonPane {...props} hasReason={false} /></IntlProvider>);
35-
const skipButton = screen.getByRole('button', { name: formatMessage(messages.reasonSkip) });
35+
const skipButton = screen.getByRole('button', { name: formatMessage(messages.confirmCancel) });
3636
expect(skipButton).toBeInTheDocument();
3737
});
3838
it('render submit button', () => {

src/containers/UnenrollConfirmModal/components/messages.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const messages = defineMessages({
1010
confirmText: {
1111
id: 'learner-dash.unenrollConfirm.confirm.text',
1212
description: 'Text for confirm unenroll modal',
13-
defaultMessage: 'Are you sure you want to unenroll from the course ?',
13+
defaultMessage: 'Are you sure you want to unenroll from the course {courseTitle} ?',
1414
},
1515
confirmCancel: {
1616
id: 'learner-dash.unenrollConfirm.confirm.cancel',
@@ -25,7 +25,7 @@ const messages = defineMessages({
2525
reasonHeading: {
2626
id: 'learner-dash.unenrollConfirm.confirm.reason.heading',
2727
description: 'Heading for unenroll reason modal',
28-
defaultMessage: `What's your main reason for unenrolling?`,
28+
defaultMessage: `Why are you unenrolling?`,
2929
},
3030
reasonSkip: {
3131
id: 'learner-dash.unenrollConfirm.confirm.reason.skip',
@@ -40,22 +40,17 @@ const messages = defineMessages({
4040
finishHeading: {
4141
id: 'learner-dash.unenrollConfirm.confirm.finish.heading',
4242
description: 'Heading for unenroll finish modal',
43-
defaultMessage: 'You are unenrolled',
44-
},
45-
finishThanksText: {
46-
id: 'learner-dash.unenrollConfirm.confirm.finish.thanks-text',
47-
description: 'Thank you message on unenroll modal for providing a reason',
48-
defaultMessage: 'Thank you for sharing your reason for unenrolling. ',
43+
defaultMessage: 'Unenrollment Successful',
4944
},
5045
finishText: {
5146
id: 'learner-dash.unenrollConfirm.confirm.finish.text',
5247
description: 'Text for unenroll finish modal',
53-
defaultMessage: 'This course will be removed from your dashboard.',
48+
defaultMessage: 'You have been unenrolled from the course {courseTitle}',
5449
},
5550
finishReturn: {
5651
id: 'learner-dash.unenrollConfirm.confirm.finish.return',
5752
description: 'Return action for unenroll finish modal',
58-
defaultMessage: 'Return to dashboard',
53+
defaultMessage: 'Ok',
5954
},
6055
});
6156

src/containers/UnenrollConfirmModal/index.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ export const UnenrollConfirmModal = ({
3838
style={{ textAlign: 'start' }}
3939
>
4040
{(modalState === modalStates.confirm) && (
41-
<ConfirmPane handleClose={close} handleConfirm={confirm} />
41+
<ConfirmPane handleClose={close} handleConfirm={confirm} cardId={cardId} />
4242
)}
4343
{(modalState === modalStates.finished) && (
44-
<FinishedPane handleClose={closeAndRefresh} gaveReason={reason.hasReason} />
44+
<FinishedPane handleClose={closeAndRefresh} cardId={cardId} />
4545
)}
4646
{(modalState === modalStates.reason) && (
4747
<ReasonPane reason={reason} handleClose={close} />

src/containers/UnenrollConfirmModal/index.test.jsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,20 @@ describe('UnenrollConfirmModal component', () => {
4848
render(<IntlProvider><UnenrollConfirmModal {...props} /></IntlProvider>);
4949
const finishHeading = screen.getByText(formatMessage(messages.finishHeading));
5050
expect(finishHeading).toBeInTheDocument();
51-
const thanksMsg = screen.getByText((text) => text.includes('Thank you'));
52-
expect(thanksMsg).toBeInTheDocument();
53-
expect(thanksMsg.innerHTML).toContain(formatMessage(messages.finishThanksText));
51+
const finishMsg = screen.getByText((text) => text.includes('You have been unenrolled from the course'));
52+
expect(finishMsg).toBeInTheDocument();
5453
});
55-
it('modalStates.finished, reason skipped', () => {
54+
it('modalStates.finished, cancel unenrollment', () => {
5655
hooks.useUnenrollData.mockReturnValueOnce({
5756
...hookProps,
5857
modalState: hooks.modalStates.finished,
59-
reason: { isSkipped: true },
6058
});
6159
render(<IntlProvider><UnenrollConfirmModal {...props} /></IntlProvider>);
6260
const finishHeading = screen.getByText(formatMessage(messages.finishHeading));
6361
expect(finishHeading).toBeInTheDocument();
64-
const thanksMsg = screen.queryByText((text) => text.includes('Thank you'));
65-
expect(thanksMsg).toBeNull();
66-
const finishMsg = screen.getByText(formatMessage(messages.finishText));
62+
const okButton = screen.queryByText((text) => text.includes('Ok'));
63+
expect(okButton).toBeInTheDocument();
64+
const finishMsg = screen.queryByText('You have been unenrolled from the course');
6765
expect(finishMsg).toBeInTheDocument();
6866
});
6967
it('modalStates.reason, should display correct component with no shadow', () => {

0 commit comments

Comments
 (0)