diff --git a/src/export-page/CourseExportPage.test.jsx b/src/export-page/CourseExportPage.test.jsx
index 8c8524feb..05db07d5b 100644
--- a/src/export-page/CourseExportPage.test.jsx
+++ b/src/export-page/CourseExportPage.test.jsx
@@ -111,7 +111,7 @@ describe('', () => {
const { getByText } = render();
expect(getByText(stepperMessages.stepperPreparingDescription.defaultMessage)).toBeInTheDocument();
});
- it('should show download path', async () => {
+ it('should show download path for relative path', async () => {
axiosMock
.onGet(getExportStatusApiUrl(courseId))
.reply(200, { exportStatus: EXPORT_STAGES.SUCCESS, exportOutput: '/test-download-path.test' });
@@ -124,4 +124,17 @@ describe('', () => {
expect(downloadButton).toBeInTheDocument();
expect(downloadButton.getAttribute('href')).toEqual(`${getConfig().STUDIO_BASE_URL}/test-download-path.test`);
});
+ it('should show download path for absolute path', async () => {
+ axiosMock
+ .onGet(getExportStatusApiUrl(courseId))
+ .reply(200, { exportStatus: EXPORT_STAGES.SUCCESS, exportOutput: 'http://test-download-path.test' });
+ const { getByText, container } = render();
+ const startExportButton = container.querySelector('.btn-primary');
+ fireEvent.click(startExportButton);
+ // eslint-disable-next-line no-promise-executor-return
+ await new Promise((r) => setTimeout(r, 3500));
+ const downloadButton = getByText(stepperMessages.downloadCourseButtonTitle.defaultMessage);
+ expect(downloadButton).toBeInTheDocument();
+ expect(downloadButton.getAttribute('href')).toEqual('http://test-download-path.test');
+ });
});
diff --git a/src/export-page/data/thunks.js b/src/export-page/data/thunks.js
index ceded5cb8..0bfdd410b 100644
--- a/src/export-page/data/thunks.js
+++ b/src/export-page/data/thunks.js
@@ -1,5 +1,6 @@
import Cookies from 'universal-cookie';
import moment from 'moment';
+import { getConfig } from '@edx/frontend-platform';
import { RequestStatus } from '../../data/constants';
import { setExportCookie } from '../utils';
@@ -48,7 +49,11 @@ export function fetchExportStatus(courseId) {
dispatch(updateCurrentStage(Math.abs(exportStatus)));
if (exportOutput) {
- dispatch(updateDownloadPath(exportOutput));
+ if (exportOutput.startsWith('/')) {
+ dispatch(updateDownloadPath(`${getConfig().STUDIO_BASE_URL}${exportOutput}`));
+ } else {
+ dispatch(updateDownloadPath(exportOutput));
+ }
dispatch(updateSuccessDate(moment().valueOf()));
}
diff --git a/src/export-page/export-stepper/ExportStepper.jsx b/src/export-page/export-stepper/ExportStepper.jsx
index 37010424d..0fbbe66e5 100644
--- a/src/export-page/export-stepper/ExportStepper.jsx
+++ b/src/export-page/export-stepper/ExportStepper.jsx
@@ -6,7 +6,6 @@ import {
} from '@edx/frontend-platform/i18n';
import PropTypes from 'prop-types';
import { useDispatch, useSelector } from 'react-redux';
-import { getConfig } from '@edx/frontend-platform';
import { Button } from '@edx/paragon';
import CourseStepper from '../../generic/course-stepper';
@@ -91,7 +90,7 @@ const ExportStepper = ({ intl, courseId }) => {
errorMessage={errorMessage}
hasError={!!errorMessage}
/>
- {downloadPath && currentStage === EXPORT_STAGES.SUCCESS && }
+ {downloadPath && currentStage === EXPORT_STAGES.SUCCESS && }
);
};