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 && } ); };