From 0c0aed00dee66a982ae8be1b11ab60be58a41914 Mon Sep 17 00:00:00 2001 From: Ben Warzeski Date: Thu, 1 Dec 2022 14:48:45 -0500 Subject: [PATCH] Fix tracking links (#81) --- .../UnenrollConfirmModal/components/ReasonPane.jsx | 5 +++-- .../components/ReasonPane.test.jsx | 2 +- .../__snapshots__/ReasonPane.test.jsx.snap | 2 +- src/containers/UnenrollConfirmModal/hooks/index.js | 10 +++++----- src/containers/UnenrollConfirmModal/index.jsx | 3 ++- src/tracking/trackers/course.js | 4 ++-- src/tracking/trackers/course.test.js | 12 ++++++++---- src/widgets/RecommendationsPanel/track.js | 7 ++++--- 8 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx b/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx index 1f40f77..8ab0977 100644 --- a/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx +++ b/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx @@ -13,6 +13,7 @@ import messages from './messages'; export const ReasonPane = ({ reason, + handleSubmit, }) => { const { formatMessage } = useIntl(); const option = (key) => ( @@ -40,7 +41,7 @@ export const ReasonPane = ({ - @@ -57,8 +58,8 @@ ReasonPane.propTypes = { onChange: PropTypes.func, }), selected: PropTypes.string, - submit: PropTypes.func, }).isRequired, + handleSubmit: PropTypes.func.isRequired, }; export default ReasonPane; diff --git a/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx b/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx index db5e490..19b092a 100644 --- a/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx +++ b/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx @@ -13,8 +13,8 @@ describe('UnenrollConfirmModal ReasonPane', () => { onChange: jest.fn().mockName('props.reason.customOption.onChange'), }, selected: 'props.reason.selected', - submit: jest.fn().mockName('props.reason.submit'), }, + handleSubmit: jest.fn().mockName('props.handleSubmit'), }; test('snapshot', () => { expect(shallow()).toMatchSnapshot(); diff --git a/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap b/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap index 87a1821..184bcb3 100644 --- a/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap +++ b/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap @@ -82,7 +82,7 @@ exports[`UnenrollConfirmModal ReasonPane snapshot 1`] = ` Skip diff --git a/src/containers/UnenrollConfirmModal/hooks/index.js b/src/containers/UnenrollConfirmModal/hooks/index.js index 5a06201..a0ef637 100644 --- a/src/containers/UnenrollConfirmModal/hooks/index.js +++ b/src/containers/UnenrollConfirmModal/hooks/index.js @@ -28,10 +28,6 @@ export const useUnenrollData = ({ closeModal, dispatch, cardId }) => { reason.submittedReason, isEntitlement, ); - const handleSubmit = () => { - handleTrackReasons(); - dispatch(thunkActions.app.unenrollFromCourse(cardId, reason.submittedReason)); - }; let modalState; if (isConfirmed) { @@ -40,6 +36,10 @@ export const useUnenrollData = ({ closeModal, dispatch, cardId }) => { modalState = modalStates.confirm; } + const handleSubmitReason = () => { + handleTrackReasons(); + dispatch(thunkActions.app.unenrollFromCourse(cardId, reason.submittedReason)); + }; const close = () => { closeModal(); setIsConfirmed(false); @@ -57,7 +57,7 @@ export const useUnenrollData = ({ closeModal, dispatch, cardId }) => { close, closeAndRefresh, modalState, - handleSubmit, + handleSubmitReason, }; }; diff --git a/src/containers/UnenrollConfirmModal/index.jsx b/src/containers/UnenrollConfirmModal/index.jsx index dc66dd2..1e159d1 100644 --- a/src/containers/UnenrollConfirmModal/index.jsx +++ b/src/containers/UnenrollConfirmModal/index.jsx @@ -27,6 +27,7 @@ export const UnenrollConfirmModal = ({ closeAndRefresh, close, modalState, + handleSubmitReason, } = useUnenrollData({ dispatch, closeModal, cardId }); const showFullscreen = modalState === modalStates.reason; return ( @@ -48,7 +49,7 @@ export const UnenrollConfirmModal = ({ )} {(modalState === modalStates.reason) && ( - + )} diff --git a/src/tracking/trackers/course.js b/src/tracking/trackers/course.js index 8b44be7..aa5262c 100644 --- a/src/tracking/trackers/course.js +++ b/src/tracking/trackers/course.js @@ -59,8 +59,8 @@ export const enterCourseClicked = (...args) => ( module.courseLinkTracker(eventNames.enterCourseClicked)(...args)); export const upgradeClicked = (courseId, href) => createLinkTracker( () => { - module.upgradeButtonClicked(courseId); - module.upgradeButtonClickedUpsell(courseId); + module.upgradeButtonClicked(courseId)(); + module.upgradeButtonClickedUpsell(courseId)(); api.logUpgrade({ courseId }); }, href, diff --git a/src/tracking/trackers/course.test.js b/src/tracking/trackers/course.test.js index 1650ce3..541ed9b 100644 --- a/src/tracking/trackers/course.test.js +++ b/src/tracking/trackers/course.test.js @@ -103,15 +103,19 @@ describe('course trackers', () => { it('triggers upgrade actions and api.logUpgrade with courseId', () => { const upgradeButtonClicked = jest.fn(); const upgradeButtonClickedUpsell = jest.fn(); + const trackUpgradeButtonClicked = jest.fn(() => upgradeButtonClicked); + const trackUpgradeButtonClickedUpsell = jest.fn(() => upgradeButtonClickedUpsell); jest.spyOn(trackers, moduleKeys.upgradeButtonClicked) - .mockImplementationOnce(upgradeButtonClicked); + .mockImplementationOnce(trackUpgradeButtonClicked); jest.spyOn(trackers, moduleKeys.upgradeButtonClickedUpsell) - .mockImplementationOnce(upgradeButtonClickedUpsell); + .mockImplementationOnce(trackUpgradeButtonClickedUpsell); const out = trackers.upgradeClicked(courseId, href).createLinkTracker; expect(out.href).toEqual(href); out.cb(); - expect(upgradeButtonClicked).toHaveBeenCalledWith(courseId); - expect(upgradeButtonClickedUpsell).toHaveBeenCalledWith(courseId); + expect(trackUpgradeButtonClicked).toHaveBeenCalledWith(courseId); + expect(trackUpgradeButtonClickedUpsell).toHaveBeenCalledWith(courseId); + expect(upgradeButtonClicked).toHaveBeenCalledWith(); + expect(upgradeButtonClickedUpsell).toHaveBeenCalledWith(); expect(api.logUpgrade).toHaveBeenCalledWith({ courseId }); }); }); diff --git a/src/widgets/RecommendationsPanel/track.js b/src/widgets/RecommendationsPanel/track.js index a27c4d4..55a4e89 100644 --- a/src/widgets/RecommendationsPanel/track.js +++ b/src/widgets/RecommendationsPanel/track.js @@ -1,9 +1,10 @@ +import { StrictDict } from 'utils'; import { createLinkTracker, createEventTracker } from 'data/services/segment/utils'; -export const eventNames = { +export const eventNames = StrictDict({ findCoursesClicked: 'edx.bi.dashboard.find_courses_button.clicked', recommendedCourseClicked: 'edx.bi.user.recommended.course.click', -}; +}); export const findCoursesClicked = (href) => createLinkTracker( createEventTracker(eventNames.findCoursesClicked, { @@ -15,7 +16,7 @@ export const findCoursesClicked = (href) => createLinkTracker( ); export const recommendedCourseClicked = (courseKey, isPersonalized, href) => createLinkTracker( - createEventTracker(eventNames.recommendedCoursesClicked, { + createEventTracker(eventNames.recommendedCourseClicked, { course_key: courseKey, is_personalized_recommendation: isPersonalized, }),