diff --git a/src/widgets/LookingForChallengeWidget/index.jsx b/src/widgets/LookingForChallengeWidget/index.jsx
index 5344597..abef370 100644
--- a/src/widgets/LookingForChallengeWidget/index.jsx
+++ b/src/widgets/LookingForChallengeWidget/index.jsx
@@ -8,7 +8,7 @@ import { reduxHooks } from 'hooks';
import moreCoursesSVG from 'assets/more-courses-sidewidget.svg';
import { baseAppUrl } from 'data/services/lms/urls';
-import track from '../RecommendationsPanel/track';
+import track from './track';
import messages from './messages';
import './index.scss';
diff --git a/src/widgets/LookingForChallengeWidget/index.test.jsx b/src/widgets/LookingForChallengeWidget/index.test.jsx
index 9bebde9..db6c397 100644
--- a/src/widgets/LookingForChallengeWidget/index.test.jsx
+++ b/src/widgets/LookingForChallengeWidget/index.test.jsx
@@ -10,7 +10,7 @@ jest.mock('hooks', () => ({
},
}));
-jest.mock('../RecommendationsPanel/track', () => ({
+jest.mock('./track', () => ({
findCoursesWidgetClicked: (href) => jest.fn().mockName(`track.findCoursesWidgetClicked('${href}')`),
}));
diff --git a/src/widgets/LookingForChallengeWidget/track.js b/src/widgets/LookingForChallengeWidget/track.js
new file mode 100644
index 0000000..70549d8
--- /dev/null
+++ b/src/widgets/LookingForChallengeWidget/track.js
@@ -0,0 +1,10 @@
+import { StrictDict } from 'utils';
+import track from 'tracking';
+
+export const linkNames = StrictDict({
+ findCoursesWidget: 'learner_home_widget_explore',
+});
+
+export const findCoursesWidgetClicked = (href) => track.findCourses.findCoursesClicked(href, {
+ linkName: linkNames.findCoursesWidget,
+});
diff --git a/src/widgets/RecommendationsPanel/LoadedView.jsx b/src/widgets/RecommendationsPanel/LoadedView.jsx
deleted file mode 100644
index a4ae290..0000000
--- a/src/widgets/RecommendationsPanel/LoadedView.jsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-import { useIntl } from '@edx/frontend-platform/i18n';
-import { Button } from '@openedx/paragon';
-import { Search } from '@openedx/paragon/icons';
-import { baseAppUrl } from 'data/services/lms/urls';
-
-import { reduxHooks } from 'hooks';
-import track from './track';
-import CourseCard from './components/CourseCard';
-import messages from './messages';
-
-import './index.scss';
-
-export const LoadedView = ({
- courses,
- isControl,
-}) => {
- const { formatMessage } = useIntl();
- const { courseSearchUrl } = reduxHooks.usePlatformSettingsData();
-
- return (
-
-
{isControl === false
- ? formatMessage(messages.recommendationsHeading) : formatMessage(messages.popularCoursesHeading)}
-
-
- {courses.map((course) => (
-
- ))}
-
-
-
-
-
- );
-};
-
-LoadedView.defaultProps = {
- isControl: true,
-};
-
-LoadedView.propTypes = {
- courses: PropTypes.arrayOf(PropTypes.shape({
- courseKey: PropTypes.string,
- title: PropTypes.string,
- logoImageUrl: PropTypes.string,
- marketingUrl: PropTypes.string,
- })).isRequired,
- isControl: PropTypes.oneOf([true, false, null]),
-};
-
-export default LoadedView;
diff --git a/src/widgets/RecommendationsPanel/LoadedView.test.jsx b/src/widgets/RecommendationsPanel/LoadedView.test.jsx
deleted file mode 100644
index 6053603..0000000
--- a/src/widgets/RecommendationsPanel/LoadedView.test.jsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react';
-import { shallow } from '@edx/react-unit-test-utils';
-
-import LoadedView from './LoadedView';
-import mockData from './mockData';
-import messages from './messages';
-
-jest.mock('hooks', () => ({
- reduxHooks: {
- usePlatformSettingsData: () => ({
- courseSearchUrl: '/course-search-url',
- }),
- },
-}));
-jest.mock('data/services/lms/urls', () => ({
- baseAppUrl: (url) => (`http://localhost:18000${url}`),
-}));
-jest.mock('./track', () => ({
- findCoursesWidgetClicked: (href) => jest.fn().mockName(`track.findCoursesWidgetClicked('${href}')`),
-}));
-jest.mock('./components/CourseCard', () => 'CourseCard');
-
-describe('RecommendationsPanel LoadedView', () => {
- const props = {
- courses: mockData.courses,
- isControl: null,
- };
-
- describe('RecommendationPanelLoadedView', () => {
- test('without personalize recommendation', () => {
- const el = shallow();
- expect(el.snapshot).toMatchSnapshot();
- expect(el.instance.findByType('h3')[0].children[0].el).toEqual(messages.popularCoursesHeading.defaultMessage);
- });
-
- test('with personalize recommendation', () => {
- const el = shallow();
- expect(el.snapshot).toMatchSnapshot();
- expect(el.instance.findByType('h3')[0].children[0].el).toEqual(messages.recommendationsHeading.defaultMessage);
- });
- });
-});
diff --git a/src/widgets/RecommendationsPanel/LoadingView.jsx b/src/widgets/RecommendationsPanel/LoadingView.jsx
deleted file mode 100644
index c957d76..0000000
--- a/src/widgets/RecommendationsPanel/LoadingView.jsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import { Spinner } from '@openedx/paragon';
-
-import { useDashboardMessages } from 'containers/Dashboard/hooks';
-
-export const LoadingView = () => {
- const { spinnerScreenReaderText } = useDashboardMessages();
- return (
-
-
-
- );
-};
-
-export default LoadingView;
diff --git a/src/widgets/RecommendationsPanel/LoadingView.test.jsx b/src/widgets/RecommendationsPanel/LoadingView.test.jsx
deleted file mode 100644
index 41f267d..0000000
--- a/src/widgets/RecommendationsPanel/LoadingView.test.jsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import { shallow } from '@edx/react-unit-test-utils';
-
-import { useDashboardMessages } from 'containers/Dashboard/hooks';
-import LoadingView from './LoadingView';
-
-jest.mock('./components/CourseCard', () => 'CourseCard');
-jest.mock('containers/Dashboard/hooks', () => ({
- useDashboardMessages: jest.fn(),
-}));
-
-const spinnerScreenReaderText = 'test-spinner-screen-reader-text';
-useDashboardMessages.mockReturnValue(spinnerScreenReaderText);
-
-describe('RecommendationsPanel LoadingView', () => {
- test('snapshot', () => {
- expect(shallow().snapshot).toMatchSnapshot();
- });
-});
diff --git a/src/widgets/RecommendationsPanel/__snapshots__/LoadedView.test.jsx.snap b/src/widgets/RecommendationsPanel/__snapshots__/LoadedView.test.jsx.snap
deleted file mode 100644
index a041a52..0000000
--- a/src/widgets/RecommendationsPanel/__snapshots__/LoadedView.test.jsx.snap
+++ /dev/null
@@ -1,151 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`RecommendationsPanel LoadedView RecommendationPanelLoadedView with personalize recommendation 1`] = `
-
-
- Recommendations for you
-
-
-
-
-
-
-
-
-
-
-
-`;
-
-exports[`RecommendationsPanel LoadedView RecommendationPanelLoadedView without personalize recommendation 1`] = `
-
-
- Popular courses
-
-
-
-
-
-
-
-
-
-
-
-`;
diff --git a/src/widgets/RecommendationsPanel/__snapshots__/LoadingView.test.jsx.snap b/src/widgets/RecommendationsPanel/__snapshots__/LoadingView.test.jsx.snap
deleted file mode 100644
index 1f52960..0000000
--- a/src/widgets/RecommendationsPanel/__snapshots__/LoadingView.test.jsx.snap
+++ /dev/null
@@ -1,12 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`RecommendationsPanel LoadingView snapshot 1`] = `
-
-
-
-`;
diff --git a/src/widgets/RecommendationsPanel/api.js b/src/widgets/RecommendationsPanel/api.js
deleted file mode 100644
index aabac02..0000000
--- a/src/widgets/RecommendationsPanel/api.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { StrictDict } from 'utils';
-import { get, stringifyUrl } from 'data/services/lms/utils';
-import urls from 'data/services/lms/urls';
-
-export const getFetchUrl = () => (`${urls.getApiUrl()}/edx_recommendations/learner_dashboard/course_recommendations/`);
-export const apiKeys = StrictDict({ user: 'user' });
-
-const fetchRecommendedCourses = () => get(stringifyUrl(getFetchUrl()));
-
-export default {
- fetchRecommendedCourses,
-};
diff --git a/src/widgets/RecommendationsPanel/api.test.js b/src/widgets/RecommendationsPanel/api.test.js
deleted file mode 100644
index 1f5c193..0000000
--- a/src/widgets/RecommendationsPanel/api.test.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { get, stringifyUrl } from 'data/services/lms/utils';
-import api, { getFetchUrl } from './api';
-
-jest.mock('data/services/lms/utils', () => ({
- stringifyUrl: (...args) => ({ stringifyUrl: args }),
- get: (...args) => ({ get: args }),
-}));
-
-describe('recommendedCourses api', () => {
- describe('fetchRecommendedCourses', () => {
- it('calls get with the correct recommendation courses URL and user', () => {
- expect(api.fetchRecommendedCourses()).toEqual(
- get(stringifyUrl(getFetchUrl())),
- );
- });
- });
-});
diff --git a/src/widgets/RecommendationsPanel/components/CourseCard.jsx b/src/widgets/RecommendationsPanel/components/CourseCard.jsx
deleted file mode 100644
index fcad36e..0000000
--- a/src/widgets/RecommendationsPanel/components/CourseCard.jsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-import { Card, Hyperlink, Truncate } from '@openedx/paragon';
-
-import { useIsCollapsed } from 'containers/CourseCard/hooks';
-import useCourseCardData from './hooks';
-import './index.scss';
-
-export const CourseCard = ({ course, isControl }) => {
- const isCollapsed = useIsCollapsed();
- const { handleCourseClick } = useCourseCardData(course, isControl);
-
- return (
-
-
-
-
-
-
-
-
- {course.title}
-
-
-
-
-
-
-
- );
-};
-
-CourseCard.propTypes = {
- course: PropTypes.shape({
- courseKey: PropTypes.string,
- title: PropTypes.string,
- logoImageUrl: PropTypes.string,
- marketingUrl: PropTypes.string,
- }).isRequired,
- isControl: PropTypes.oneOf([true, false, null]).isRequired,
-};
-
-export default CourseCard;
diff --git a/src/widgets/RecommendationsPanel/components/hooks.js b/src/widgets/RecommendationsPanel/components/hooks.js
deleted file mode 100644
index 47c1eb0..0000000
--- a/src/widgets/RecommendationsPanel/components/hooks.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import track from '../track';
-import './index.scss';
-
-export const useCourseCardData = (course, isControl) => {
- const handleCourseClick = (e) => {
- e.preventDefault();
-
- track.recommendedCourseClicked(
- course.courseKey,
- isControl,
- course?.marketingUrl,
- )(e);
- };
- return { handleCourseClick };
-};
-
-export default useCourseCardData;
diff --git a/src/widgets/RecommendationsPanel/components/index.scss b/src/widgets/RecommendationsPanel/components/index.scss
deleted file mode 100644
index fc1cae0..0000000
--- a/src/widgets/RecommendationsPanel/components/index.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-@import "@openedx/paragon/scss/core/core";
-
-.card-link{
- display: block !important;
- margin: 0.5rem 0 0.5rem 0 !important;
-}
-
-.recommended-course-card {
- margin: 0.5rem 0 0.5rem 0 !important;
-
- .pgn__card-wrapper-image-cap {
- width: 7.188rem !important;
- max-width: 7.188rem !important;
- min-width: 7.188rem !important;
- height: 4.125rem !important;
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15), 0 1px 4px rgba(0, 0, 0, 0.15);
- border-radius: 4px;
- padding: 0.5rem;
-
- .pgn__card-image-cap {
- max-width: 100% !important;
- max-height: 100% !important;
- }
- }
- .pgn__card-section {
- padding: 0 !important;
- }
- margin-top: 0.313rem;
-}
-
-.text-info-500 {
- margin: 0 !important;
-}
diff --git a/src/widgets/RecommendationsPanel/hooks.js b/src/widgets/RecommendationsPanel/hooks.js
deleted file mode 100644
index 6d3fc7c..0000000
--- a/src/widgets/RecommendationsPanel/hooks.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react';
-
-import { StrictDict } from 'utils';
-import { RequestStates } from 'data/constants/requests';
-
-import * as module from './hooks';
-import testData from './testData';
-import api from './api';
-
-export const searchCourseEventName = 'learner_home.widget.search_course';
-
-export const state = StrictDict({
- requestState: (val) => React.useState(val), // eslint-disable-line
- data: (val) => React.useState(val), // eslint-disable-line
- courses: (val) => React.useState(val), // eslint-disable-line
-});
-
-export const useFetchCourses = (setRequestState, setData) => {
- React.useEffect(() => {
- let isMounted = true;
- api.fetchRecommendedCourses().then((response) => {
- if (isMounted) {
- setRequestState(RequestStates.completed);
- setData(response);
- }
- }).catch(() => {
- if (isMounted) {
- setRequestState(RequestStates.failed);
- }
- });
- return () => { isMounted = false; };
- /* eslint-disable */
- }, []);
-};
-
-export const useRecommendationPanelData = () => {
- const [requestState, setRequestState] = module.state.requestState(RequestStates.pending);
- const [data, setData] = module.state.data({});
- module.useFetchCourses(setRequestState, setData);
- const [courses, setCourses] = module.state.courses(data.data?.courses || []);
- const isControl = data.data?.isControl === undefined ? null : data.data?.isControl;
-
- React.useEffect(() => {
- window.loadMockRecommendations = () => {
- setCourses(testData.courses);
- setRequestState(RequestStates.completed);
- }
- }, []);
-
- React.useEffect(() => {
- setCourses(data.data?.courses || []);
- }, [data]);
-
- return {
- courses,
- isControl,
- isLoaded: requestState === RequestStates.completed && courses.length > 0,
- isFailed: requestState === RequestStates.failed
- || (requestState === RequestStates.completed && courses.length === 0),
- isLoading: requestState === RequestStates.pending,
- };
-};
-
-export default {
- useRecommendationPanelData,
-};
diff --git a/src/widgets/RecommendationsPanel/hooks.test.js b/src/widgets/RecommendationsPanel/hooks.test.js
deleted file mode 100644
index 162903e..0000000
--- a/src/widgets/RecommendationsPanel/hooks.test.js
+++ /dev/null
@@ -1,191 +0,0 @@
-import React from 'react';
-
-import { MockUseState } from 'testUtils';
-import { RequestStates } from 'data/constants/requests';
-
-import api from './api';
-import * as hooks from './hooks';
-
-jest.mock('./api', () => ({
- fetchRecommendedCourses: jest.fn(),
-}));
-
-const state = new MockUseState(hooks);
-
-const testList = [1, 2, 3];
-let out;
-describe('RecommendationsPanel hooks', () => {
- beforeEach(() => {
- jest.resetAllMocks();
- });
- describe('state fields', () => {
- state.testGetter(state.keys.requestState);
- });
- describe('useFetchCourse', () => {
- describe('behavior', () => {
- describe('useEffect call', () => {
- let calls;
- let cb;
- let prereqs;
- const response = 'test-response';
- const setRequestState = jest.fn();
- const setData = jest.fn();
- beforeEach(() => {
- out = hooks.useFetchCourses(setRequestState, setData);
- ({ calls } = React.useEffect.mock);
- ([[cb, prereqs]] = calls);
- });
- it('calls useEffect once', () => {
- expect(calls.length).toEqual(1);
- });
- it('it is only run once (no prereqs)', () => {
- expect(prereqs).toEqual([]);
- });
- it('calls fetchRecommendedCourses', () => {
- api.fetchRecommendedCourses.mockReturnValueOnce(Promise.resolve(response));
- cb();
- expect(api.fetchRecommendedCourses).toHaveBeenCalledWith();
- });
- describe('successful fetch on mounted component', () => {
- it('sets request state to completed and loads response', async () => {
- let resolveFn;
- api.fetchRecommendedCourses.mockReturnValueOnce(new Promise(resolve => {
- resolveFn = resolve;
- }));
- cb();
- expect(api.fetchRecommendedCourses).toHaveBeenCalledWith();
- expect(setRequestState).not.toHaveBeenCalled();
- expect(setData).not.toHaveBeenCalledWith(response);
- await resolveFn(response);
- expect(setRequestState).toHaveBeenCalledWith(RequestStates.completed);
- expect(setData).toHaveBeenCalledWith(response);
- });
- });
- describe('successful fetch on unmounted component', () => {
- it('it does nothing', async () => {
- let resolveFn;
- api.fetchRecommendedCourses.mockReturnValueOnce(new Promise(resolve => {
- resolveFn = resolve;
- }));
- const unMount = cb();
- expect(api.fetchRecommendedCourses).toHaveBeenCalledWith();
- expect(setRequestState).not.toHaveBeenCalled();
- expect(setData).not.toHaveBeenCalledWith(response);
- unMount();
- await resolveFn(response);
- expect(setRequestState).not.toHaveBeenCalled();
- expect(setData).not.toHaveBeenCalled();
- });
- });
- });
- });
- });
- describe('useRecommendationPanelData', () => {
- let fetchSpy;
- beforeEach(() => {
- state.mock();
- fetchSpy = jest.spyOn(hooks, 'useFetchCourses').mockImplementationOnce(() => {});
- out = hooks.useRecommendationPanelData();
- });
- it('calls useFetchCourses with setRequestState and setData', () => {
- expect(fetchSpy).toHaveBeenCalledWith(state.setState.requestState, state.setState.data);
- });
- it('initializes requestState as RequestStates.pending', () => {
- state.expectInitializedWith(state.keys.requestState, RequestStates.pending);
- });
- it('initializes requestState as RequestStates.pending', () => {
- state.expectInitializedWith(state.keys.requestState, RequestStates.pending);
- });
- describe('output', () => {
- describe('request is completed, with returned courses', () => {
- beforeEach(() => {
- state.mockVal(state.keys.requestState, RequestStates.completed);
- state.mockVal(state.keys.data, { data: { courses: testList } });
- out = hooks.useRecommendationPanelData();
- });
- it('is not loading', () => {
- expect(out.isLoading).toEqual(false);
- });
- it('is loaded', () => {
- expect(out.isLoaded).toEqual(true);
- });
- it('is not failed', () => {
- expect(out.isFailed).toEqual(false);
- });
- it('returns passed courses list', () => {
- expect(out.courses).toEqual(testList);
- });
- });
- describe('personalize recommendation', () => {
- it('default to null', () => {
- state.mockVal(state.keys.data, {});
- out = hooks.useRecommendationPanelData();
- expect(out.isControl).toEqual(null);
- });
- it('is based on data', () => {
- const expectOutput = { test: 'abirary' };
- state.mockVal(state.keys.data, { data: { isControl: expectOutput } });
- out = hooks.useRecommendationPanelData();
- expect(out.isControl).toEqual(expectOutput);
- });
- });
- describe('request is completed, with no returned courses', () => {
- beforeEach(() => {
- state.mockVal(state.keys.requestState, RequestStates.completed);
- state.mockVal(state.keys.data, { data: { courses: [] } });
- out = hooks.useRecommendationPanelData();
- });
- it('is not loading', () => {
- expect(out.isLoading).toEqual(false);
- });
- it('is not loaded', () => {
- expect(out.isLoaded).toEqual(false);
- });
- it('is failed', () => {
- expect(out.isFailed).toEqual(true);
- });
- it('returns empty courses list', () => {
- expect(out.courses).toEqual([]);
- });
- });
- describe('request is failed', () => {
- beforeEach(() => {
- state.mockVal(state.keys.requestState, RequestStates.failed);
- state.mockVal(state.keys.data, {});
- out = hooks.useRecommendationPanelData();
- });
- it('is not loading', () => {
- expect(out.isLoading).toEqual(false);
- });
- it('is not loaded', () => {
- expect(out.isLoaded).toEqual(false);
- });
- it('is failed', () => {
- expect(out.isFailed).toEqual(true);
- });
- it('returns empty courses list', () => {
- expect(out.courses).toEqual([]);
- });
- });
- describe('request is pending', () => {
- beforeEach(() => {
- state.mockVal(state.keys.requestState, RequestStates.pending);
- state.mockVal(state.keys.data, {});
- out = hooks.useRecommendationPanelData();
- });
- it('is loading', () => {
- expect(out.isLoading).toEqual(true);
- });
- it('is not loaded', () => {
- expect(out.isLoaded).toEqual(false);
- });
- it('is not failed', () => {
- expect(out.isFailed).toEqual(false);
- });
- it('returns empty courses list', () => {
- expect(out.courses).toEqual([]);
- });
- });
- });
- });
-});
diff --git a/src/widgets/RecommendationsPanel/index.jsx b/src/widgets/RecommendationsPanel/index.jsx
deleted file mode 100644
index c091a8d..0000000
--- a/src/widgets/RecommendationsPanel/index.jsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-
-import LookingForChallengeWidget from 'widgets/LookingForChallengeWidget';
-import LoadingView from './LoadingView';
-import LoadedView from './LoadedView';
-import hooks from './hooks';
-
-export const RecommendationsPanel = () => {
- const {
- courses,
- isControl,
- isFailed,
- isLoaded,
- isLoading,
- } = hooks.useRecommendationPanelData();
-
- if (isLoading) {
- return ();
- }
- if (isLoaded && courses.length > 0) {
- return (
-
- );
- }
- if (isFailed) {
- return ();
- }
- // default fallback
- return ();
-};
-
-export default RecommendationsPanel;
diff --git a/src/widgets/RecommendationsPanel/index.scss b/src/widgets/RecommendationsPanel/index.scss
deleted file mode 100644
index 5162717..0000000
--- a/src/widgets/RecommendationsPanel/index.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-@import "@openedx/paragon/scss/core/core";
-
-.explore-courses-btn {
- padding-top: 16px;
-}
-
-.panel-background {
- background: $light-200;
-}
-
-.recommendations-loading {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 7.813rem;
- background: $light-200;
-}
diff --git a/src/widgets/RecommendationsPanel/index.test.jsx b/src/widgets/RecommendationsPanel/index.test.jsx
deleted file mode 100644
index fd92680..0000000
--- a/src/widgets/RecommendationsPanel/index.test.jsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from 'react';
-import { shallow } from '@edx/react-unit-test-utils';
-
-import LookingForChallengeWidget from 'widgets/LookingForChallengeWidget';
-import hooks from './hooks';
-import mockData from './mockData';
-import LoadedView from './LoadedView';
-import LoadingView from './LoadingView';
-import RecommendationsPanel from '.';
-
-jest.mock('./hooks', () => ({
- useRecommendationPanelData: jest.fn(),
-}));
-jest.mock('widgets/LookingForChallengeWidget', () => 'LookingForChallengeWidget');
-jest.mock('./LoadingView', () => 'LoadingView');
-jest.mock('./LoadedView', () => 'LoadedView');
-
-const { courses } = mockData;
-
-describe('RecommendationsPanel snapshot', () => {
- const defaultLoadedViewProps = {
- courses: [],
- isControl: false,
- };
- const defaultValues = {
- isFailed: false,
- isLoaded: false,
- isLoading: false,
- ...defaultLoadedViewProps,
- };
- describe('RecommendationsPanel recommendations tests', () => {
- it('displays LoadingView if request is loading', () => {
- hooks.useRecommendationPanelData.mockReturnValueOnce({
- ...defaultValues,
- isLoading: true,
- });
- expect({ ...shallow().shallowWrapper, children: expect.any(Array) })
- .toMatchObject(shallow());
- });
- it('displays LoadedView with courses if request is loaded', () => {
- hooks.useRecommendationPanelData.mockReturnValueOnce({
- ...defaultValues,
- courses,
- isLoaded: true,
- });
- expect({ ...shallow().shallowWrapper, children: expect.any(Array) }).toMatchObject(
- shallow(),
- );
- });
- it('displays LookingForChallengeWidget if request is failed', () => {
- hooks.useRecommendationPanelData.mockReturnValueOnce({
- ...defaultValues,
- isFailed: true,
- });
- expect({ ...shallow().shallowWrapper, children: expect.any(Array) }).toMatchObject(
- shallow(),
- );
- });
- it('defaults to LookingForChallengeWidget if no flags are true', () => {
- hooks.useRecommendationPanelData.mockReturnValueOnce({
- ...defaultValues,
- });
- expect({ ...shallow().shallowWrapper, children: expect.any(Array) }).toMatchObject(
- shallow(),
- );
- });
- });
-});
diff --git a/src/widgets/RecommendationsPanel/messages.js b/src/widgets/RecommendationsPanel/messages.js
deleted file mode 100644
index 69bedd4..0000000
--- a/src/widgets/RecommendationsPanel/messages.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { defineMessages } from '@edx/frontend-platform/i18n';
-
-const messages = defineMessages({
- recommendationsHeading: {
- id: 'RecommendationsPanel.recommendationsHeading',
- defaultMessage: 'Recommendations for you',
- description: 'Personalize courses heading on recommendations panel',
- },
- popularCoursesHeading: {
- id: 'RecommendationsPanel.popularCoursesHeading',
- defaultMessage: 'Popular courses',
- description: 'Popular courses heading on recommendations panel',
- },
- exploreCoursesButton: {
- id: 'RecommendationsPanel.exploreCoursesButton',
- defaultMessage: 'Explore courses',
- description: 'Button to explore more courses on recommendations panel',
- },
-});
-
-export default messages;
diff --git a/src/widgets/RecommendationsPanel/mockData.js b/src/widgets/RecommendationsPanel/mockData.js
deleted file mode 100644
index 58d148b..0000000
--- a/src/widgets/RecommendationsPanel/mockData.js
+++ /dev/null
@@ -1,31 +0,0 @@
-export const recommendedCoursesData = {
- courses: [
- {
- logoImageUrl: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
- title: 'Recommended course 1',
- marketingUrl: 'www.edx/recommended-course',
- courseKey: 'cs-1',
- },
- {
- logoImageUrl: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
- title: 'Recommended course 2 with a really really really long name for some reason',
- marketingUrl: 'www.edx/recommended-course',
- courseKey: 'cs-2',
- },
- {
- logoImageUrl: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
- title: 'Recommended course 3',
- marketingUrl: 'www.edx/recommended-course',
- courseKey: 'cs-3',
- },
- {
- logoImageUrl: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
- title: 'Recommended course 4',
- marketingUrl: 'www.edx/recommended-course',
- courseKey: 'cs-4',
- },
- ],
- isControl: true,
-};
-
-export default recommendedCoursesData;
diff --git a/src/widgets/RecommendationsPanel/testData.js b/src/widgets/RecommendationsPanel/testData.js
deleted file mode 100644
index 944cd61..0000000
--- a/src/widgets/RecommendationsPanel/testData.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// eslint-disable-next-line
-export default {"courses":[{"courseKey":"ETSx+TOEFLx","logoImageUrl":"https://prod-discovery.edx-cdn.org/organization/logos/9d9e1a30-c34d-4ad1-8c5a-d2410db8c123-8beea336c2a4.png","marketingUrl":"https://www.edx.org/course/toefl-test-preparation-the-insiders-guide?utm_source=lms_catalog_service_user&utm_medium=affiliate_partner","title":"TOEFL® Test Preparation: The Insider’s Guide"},{"courseKey":"HarvardX+CS50P","logoImageUrl":"https://prod-discovery.edx-cdn.org/organization/logos/44022f13-20df-4666-9111-cede3e5dc5b6-2cc39992c67a.png","marketingUrl":"https://www.edx.org/course/cs50s-introduction-to-programming-with-python?utm_source=lms_catalog_service_user&utm_medium=affiliate_partner","title":"CS50's Introduction to Programming with Python"},{"courseKey":"UQx+IELTSx","logoImageUrl":"https://prod-discovery.edx-cdn.org/organization/logos/8554749f-b920-4d7f-8986-af6bb95290aa-f336c6a2ca11.png","marketingUrl":"https://www.edx.org/course/ielts-academic-test-preparation?utm_source=lms_catalog_service_user&utm_medium=affiliate_partner","title":"IELTS Academic Test Preparation"},{"courseKey":"QUx+QU01X02","logoImageUrl":"https://prod-discovery.edx-cdn.org/organization/logos/7b6ca3d5-1030-408f-b1a4-fb140db1854e-7337e1e6deaf.png","marketingUrl":"https://www.edx.org/course/arabic-for-non-arabic-speakers?utm_source=lms_catalog_service_user&utm_medium=affiliate_partner","title":"Arabic for non-Arabic Speakers"},{"courseKey":"HarvardX+CS50W","logoImageUrl":"https://prod-discovery.edx-cdn.org/organization/logos/44022f13-20df-4666-9111-cede3e5dc5b6-2cc39992c67a.png","marketingUrl":"https://www.edx.org/course/cs50s-web-programming-with-python-and-javascript?utm_source=lms_catalog_service_user&utm_medium=affiliate_partner","title":"CS50's Web Programming with Python and JavaScript"}],"isControl":true};
diff --git a/src/widgets/RecommendationsPanel/track.js b/src/widgets/RecommendationsPanel/track.js
deleted file mode 100644
index 7f57a72..0000000
--- a/src/widgets/RecommendationsPanel/track.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { StrictDict } from 'utils';
-import { createLinkTracker, createEventTracker } from 'data/services/segment/utils';
-import track from 'tracking';
-
-export const eventNames = StrictDict({
- recommendedCourseClicked: 'edx.bi.user.recommended.course.click',
-});
-
-export const linkNames = StrictDict({
- findCoursesWidget: 'learner_home_widget_explore',
-});
-
-export const findCoursesWidgetClicked = (href) => track.findCourses.findCoursesClicked(href, {
- linkName: linkNames.findCoursesWidget,
-});
-
-export const recommendedCourseClicked = (courseKey, isControl, href) => createLinkTracker(
- createEventTracker(eventNames.recommendedCourseClicked, {
- course_key: courseKey,
- is_control: isControl,
- page: 'dashboard',
- }),
- href,
-);
-
-export default {
- findCoursesWidgetClicked,
- recommendedCourseClicked,
-};