From ffa0f146933af2d3c8e86b9ab6815cecde169166 Mon Sep 17 00:00:00 2001 From: Ihor Romaniuk Date: Thu, 4 Apr 2024 15:28:39 +0200 Subject: [PATCH] feat: [FC-0044] Unit page - display component support label (#913) * feat: [FC-0044] Unit page - display component support label * fix: add message description for tooltip of module support --- .../add-component/AddComponent.jsx | 28 +-- .../add-component/AddComponent.test.jsx | 160 ++++++++++++++++-- .../add-component-btn/AddComponentIcon.jsx | 4 +- .../ComponentModalView.jsx | 45 ++++- src/course-unit/add-component/messages.js | 40 +++++ src/course-unit/constants.js | 35 +++- .../course-xblock/CourseXBlock.jsx | 8 +- .../course-xblock/CourseXBlock.test.jsx | 8 +- 8 files changed, 273 insertions(+), 55 deletions(-) diff --git a/src/course-unit/add-component/AddComponent.jsx b/src/course-unit/add-component/AddComponent.jsx index 57622856b..78125366d 100644 --- a/src/course-unit/add-component/AddComponent.jsx +++ b/src/course-unit/add-component/AddComponent.jsx @@ -5,7 +5,7 @@ import { useIntl } from '@edx/frontend-platform/i18n'; import { useToggle } from '@openedx/paragon'; import { getCourseSectionVertical } from '../data/selectors'; -import { COMPONENT_ICON_TYPES } from '../constants'; +import { COMPONENT_TYPES } from '../constants'; import ComponentModalView from './add-component-modals/ComponentModalView'; import AddComponentButton from './add-component-btn'; import messages from './messages'; @@ -20,32 +20,32 @@ const AddComponent = ({ blockId, handleCreateNewCourseXBlock }) => { const handleCreateNewXBlock = (type, moduleName) => { switch (type) { - case COMPONENT_ICON_TYPES.discussion: - case COMPONENT_ICON_TYPES.dragAndDrop: + case COMPONENT_TYPES.discussion: + case COMPONENT_TYPES.dragAndDrop: handleCreateNewCourseXBlock({ type, parentLocator: blockId }); break; - case COMPONENT_ICON_TYPES.problem: - case COMPONENT_ICON_TYPES.video: + case COMPONENT_TYPES.problem: + case COMPONENT_TYPES.video: handleCreateNewCourseXBlock({ type, parentLocator: blockId }, ({ courseKey, locator }) => { navigate(`/course/${courseKey}/editor/${type}/${locator}`); }); break; // TODO: The library functional will be a bit different of current legacy (CMS) // behaviour and this ticket is on hold (blocked by other development team). - case COMPONENT_ICON_TYPES.library: + case COMPONENT_TYPES.library: handleCreateNewCourseXBlock({ type, category: 'library_content', parentLocator: blockId }); break; - case COMPONENT_ICON_TYPES.advanced: + case COMPONENT_TYPES.advanced: handleCreateNewCourseXBlock({ type: moduleName, category: moduleName, parentLocator: blockId, }); break; - case COMPONENT_ICON_TYPES.openassessment: + case COMPONENT_TYPES.openassessment: handleCreateNewCourseXBlock({ boilerplate: moduleName, category: type, parentLocator: blockId, }); break; - case COMPONENT_ICON_TYPES.html: + case COMPONENT_TYPES.html: handleCreateNewCourseXBlock({ type, boilerplate: moduleName, @@ -70,22 +70,26 @@ const AddComponent = ({ blockId, handleCreateNewCourseXBlock }) => { const { type, displayName } = component; let modalParams; + if (!component.templates.length) { + return null; + } + switch (type) { - case COMPONENT_ICON_TYPES.advanced: + case COMPONENT_TYPES.advanced: modalParams = { open: openAdvanced, close: closeAdvanced, isOpen: isOpenAdvanced, }; break; - case COMPONENT_ICON_TYPES.html: + case COMPONENT_TYPES.html: modalParams = { open: openHtml, close: closeHtml, isOpen: isOpenHtml, }; break; - case COMPONENT_ICON_TYPES.openassessment: + case COMPONENT_TYPES.openassessment: modalParams = { open: openOpenAssessment, close: closeOpenAssessment, diff --git a/src/course-unit/add-component/AddComponent.test.jsx b/src/course-unit/add-component/AddComponent.test.jsx index a675df903..9bd5a5de0 100644 --- a/src/course-unit/add-component/AddComponent.test.jsx +++ b/src/course-unit/add-component/AddComponent.test.jsx @@ -14,7 +14,7 @@ import { executeThunk } from '../../utils'; import { fetchCourseSectionVerticalData } from '../data/thunk'; import { getCourseSectionVerticalApiUrl } from '../data/api'; import { courseSectionVerticalMock } from '../__mocks__'; -import { COMPONENT_ICON_TYPES } from '../constants'; +import { COMPONENT_TYPES } from '../constants'; import AddComponent from './AddComponent'; import messages from './messages'; @@ -66,7 +66,7 @@ describe('', () => { )); }); - it('doesn\'t render AddComponent component when there aren\'t componentTemplates', async () => { + it('AddComponent component doesn\'t render when there aren\'t componentTemplates', async () => { axiosMock .onGet(getCourseSectionVerticalApiUrl(blockId)) .reply(200, { @@ -80,7 +80,43 @@ describe('', () => { expect(queryByRole('heading', { name: messages.title.defaultMessage })).not.toBeInTheDocument(); }); - it('does\'t call handleCreateNewCourseXblock with custom component create button is clicked', async () => { + it('AddComponent component item doesn\'t render when there aren\'t templates', async () => { + const componentTemplates = courseSectionVerticalMock.component_templates; + axiosMock + .onGet(getCourseSectionVerticalApiUrl(blockId)) + .reply(200, { + ...courseSectionVerticalMock, + component_templates: [ + ...courseSectionVerticalMock.component_templates.map((component) => { + if (component.type === COMPONENT_TYPES.discussion) { + return { + ...component, + templates: [], + }; + } + + return component; + }), + ], + }); + await executeThunk(fetchCourseSectionVerticalData(blockId), store.dispatch); + + const { queryByRole, getByRole } = renderComponent(); + + Object.keys(componentTemplates).map((component) => { + if (componentTemplates[component].type === COMPONENT_TYPES.discussion) { + return expect(queryByRole('button', { + name: new RegExp(`${messages.buttonText.defaultMessage} ${componentTemplates[component].display_name}`, 'i'), + })).not.toBeInTheDocument(); + } + + return expect(getByRole('button', { + name: new RegExp(`${messages.buttonText.defaultMessage} ${componentTemplates[component].display_name}`, 'i'), + })).toBeInTheDocument(); + }); + }); + + it('handleCreateNewCourseXblock does\'t call with custom component create button is clicked', async () => { axiosMock .onGet(getCourseSectionVerticalApiUrl(blockId)) .reply(200, { @@ -88,7 +124,7 @@ describe('', () => { component_templates: [ { type: 'custom', - templates: [], + templates: [{ display_name: 'Custom' }], display_name: 'Custom', support_legend: {}, }, @@ -117,7 +153,7 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - type: 'discussion', + type: COMPONENT_TYPES.discussion, }); }); @@ -132,7 +168,7 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - type: 'drag-and-drop-v2', + type: COMPONENT_TYPES.dragAndDrop, }); }); @@ -147,7 +183,7 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - type: 'problem', + type: COMPONENT_TYPES.problem, }, expect.any(Function)); }); @@ -162,7 +198,7 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - type: 'video', + type: COMPONENT_TYPES.video, }, expect.any(Function)); }); @@ -178,7 +214,7 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', category: 'library_content', - type: 'library', + type: COMPONENT_TYPES.library, }); }); @@ -213,7 +249,7 @@ describe('', () => { await waitFor(() => { expect(getByText(/Add advanced component/i)).toBeInTheDocument(); componentTemplates.forEach((componentTemplate) => { - if (componentTemplate.type === COMPONENT_ICON_TYPES.advanced) { + if (componentTemplate.type === COMPONENT_TYPES.advanced) { componentTemplate.templates.forEach((template) => { expect(within(modalContainer).getByRole('radio', { name: template.display_name })).toBeInTheDocument(); }); @@ -234,7 +270,7 @@ describe('', () => { await waitFor(() => { expect(getByText(/Add text component/i)).toBeInTheDocument(); componentTemplates.forEach((componentTemplate) => { - if (componentTemplate.type === COMPONENT_ICON_TYPES.html) { + if (componentTemplate.type === COMPONENT_TYPES.html) { componentTemplate.templates.forEach((template) => { expect(within(modalContainer).getByRole('radio', { name: template.display_name })).toBeInTheDocument(); }); @@ -256,7 +292,7 @@ describe('', () => { await waitFor(() => { expect(getByText(/Add open response component/i)).toBeInTheDocument(); componentTemplates.forEach((componentTemplate) => { - if (componentTemplate.type === COMPONENT_ICON_TYPES.openassessment) { + if (componentTemplate.type === COMPONENT_TYPES.openassessment) { componentTemplate.templates.forEach((template) => { expect(within(modalContainer).getByRole('radio', { name: template.display_name })).toBeInTheDocument(); }); @@ -312,8 +348,8 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - type: 'html', - boilerplate: 'html', + type: COMPONENT_TYPES.html, + boilerplate: COMPONENT_TYPES.html, }, expect.any(Function)); }); @@ -338,8 +374,102 @@ describe('', () => { expect(handleCreateNewCourseXBlockMock).toHaveBeenCalled(); expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ parentLocator: '123', - category: 'openassessment', + category: COMPONENT_TYPES.openassessment, boilerplate: 'peer-assessment', }); }); + + describe('component support label', () => { + it('component support label is hidden if component support legend is disabled', async () => { + const supportLevels = ['fs', 'ps']; + axiosMock + .onGet(getCourseSectionVerticalApiUrl(blockId)) + .reply(200, { + ...courseSectionVerticalMock, + component_templates: [ + ...courseSectionVerticalMock.component_templates.map((component) => { + if (component.type === COMPONENT_TYPES.advanced) { + return { + ...component, + support_legend: { show_legend: false }, + templates: [ + ...component.templates.map((template, i) => ({ + ...template, + support_level: supportLevels[i] || true, + })), + ], + }; + } + + return component; + }), + ], + }); + await executeThunk(fetchCourseSectionVerticalData(blockId), store.dispatch); + + const { getByRole } = renderComponent(); + const advancedButton = getByRole('button', { + name: new RegExp(`${messages.buttonText.defaultMessage} Advanced`, 'i'), + }); + + userEvent.click(advancedButton); + const modalContainer = getByRole('dialog'); + const fullySupportLabel = within(modalContainer) + .queryByText(messages.modalComponentSupportLabelFullySupported.defaultMessage); + const provisionallySupportLabel = within(modalContainer) + .queryByText(messages.modalComponentSupportLabelProvisionallySupported.defaultMessage); + + expect(fullySupportLabel).not.toBeInTheDocument(); + expect(provisionallySupportLabel).not.toBeInTheDocument(); + }); + + it('displays component support label and tooltip in component modal', async () => { + const supportLevels = ['fs', 'ps']; + axiosMock + .onGet(getCourseSectionVerticalApiUrl(blockId)) + .reply(200, { + ...courseSectionVerticalMock, + component_templates: [ + ...courseSectionVerticalMock.component_templates.map((component) => { + if (component.type === COMPONENT_TYPES.advanced) { + return { + ...component, + support_legend: { show_legend: true }, + templates: [ + ...component.templates.map((template, i) => ({ + ...template, + support_level: supportLevels[i] || true, + })), + ], + }; + } + + return component; + }), + ], + }); + await executeThunk(fetchCourseSectionVerticalData(blockId), store.dispatch); + + const { getByRole, getByText } = renderComponent(); + const advancedButton = getByRole('button', { + name: new RegExp(`${messages.buttonText.defaultMessage} Advanced`, 'i'), + }); + + userEvent.click(advancedButton); + const modalContainer = getByRole('dialog'); + const fullySupportLabel = within(modalContainer) + .getByText(messages.modalComponentSupportLabelFullySupported.defaultMessage); + const provisionallySupportLabel = within(modalContainer) + .getByText(messages.modalComponentSupportLabelProvisionallySupported.defaultMessage); + + expect(fullySupportLabel).toBeInTheDocument(); + expect(provisionallySupportLabel).toBeInTheDocument(); + + userEvent.hover(fullySupportLabel); + expect(getByText(messages.modalComponentSupportTooltipFullySupported.defaultMessage)).toBeInTheDocument(); + + userEvent.hover(provisionallySupportLabel); + expect(getByText(messages.modalComponentSupportTooltipProvisionallySupported.defaultMessage)).toBeInTheDocument(); + }); + }); }); diff --git a/src/course-unit/add-component/add-component-btn/AddComponentIcon.jsx b/src/course-unit/add-component/add-component-btn/AddComponentIcon.jsx index 6d0f9c162..4ace3ea01 100644 --- a/src/course-unit/add-component/add-component-btn/AddComponentIcon.jsx +++ b/src/course-unit/add-component/add-component-btn/AddComponentIcon.jsx @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import { Icon } from '@openedx/paragon'; import { EditNote as EditNoteIcon } from '@openedx/paragon/icons'; -import { COMPONENT_ICON_TYPES, COMPONENT_TYPE_ICON_MAP } from '../../constants'; +import { COMPONENT_TYPES, COMPONENT_TYPE_ICON_MAP } from '../../constants'; const AddComponentIcon = ({ type }) => { const icon = COMPONENT_TYPE_ICON_MAP[type] || EditNoteIcon; @@ -11,7 +11,7 @@ const AddComponentIcon = ({ type }) => { }; AddComponentIcon.propTypes = { - type: PropTypes.oneOf(Object.values(COMPONENT_ICON_TYPES)).isRequired, + type: PropTypes.oneOf(Object.values(COMPONENT_TYPES)).isRequired, }; export default AddComponentIcon; diff --git a/src/course-unit/add-component/add-component-modals/ComponentModalView.jsx b/src/course-unit/add-component/add-component-modals/ComponentModalView.jsx index cba0ad0bd..ae1464a2c 100644 --- a/src/course-unit/add-component/add-component-modals/ComponentModalView.jsx +++ b/src/course-unit/add-component/add-component-modals/ComponentModalView.jsx @@ -1,10 +1,11 @@ import { useState } from 'react'; import { useDispatch } from 'react-redux'; import PropTypes from 'prop-types'; -import { Form } from '@openedx/paragon'; +import { Form, OverlayTrigger, Tooltip } from '@openedx/paragon'; import { useIntl } from '@edx/frontend-platform/i18n'; import { updateQueryPendingStatus } from '../../data/slice'; +import { getXBlockSupportMessages } from '../../constants'; import AddComponentButton from '../add-component-btn'; import messages from '../messages'; import ModalContainer from './ModalContainer'; @@ -18,7 +19,10 @@ const ComponentModalView = ({ const dispatch = useDispatch(); const [moduleTitle, setModuleTitle] = useState(''); const { open, close, isOpen } = modalParams; - const { type, displayName, templates } = component; + const { + type, displayName, templates, supportLegend, + } = component; + const supportLabels = getXBlockSupportMessages(intl); const handleSubmit = () => { handleCreateNewXBlock(type, moduleTitle); @@ -51,15 +55,32 @@ const ComponentModalView = ({ > {templates.map((componentTemplate) => { const value = componentTemplate.boilerplateName || componentTemplate.category; + const isDisplaySupportLabel = supportLegend.showLegend && supportLabels[componentTemplate.supportLevel]; return ( - - {componentTemplate.displayName} - +
+ + {componentTemplate.displayName} + + {isDisplaySupportLabel && ( + + {supportLabels[componentTemplate.supportLevel].tooltip} + + )} + > + + {supportLabels[componentTemplate.supportLevel].label} + + + )} +
); })} @@ -85,8 +106,14 @@ ComponentModalView.propTypes = { boilerplateName: PropTypes.string, category: PropTypes.string, displayName: PropTypes.string.isRequired, + supportLevel: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), }), ), + supportLegend: PropTypes.shape({ + allowUnsupportedXblocks: PropTypes.bool, + documentationLabel: PropTypes.string, + showLegend: PropTypes.bool, + }), }).isRequired, }; diff --git a/src/course-unit/add-component/messages.js b/src/course-unit/add-component/messages.js index 959b70292..bc6c30983 100644 --- a/src/course-unit/add-component/messages.js +++ b/src/course-unit/add-component/messages.js @@ -21,6 +21,46 @@ const messages = defineMessages({ id: 'course-authoring.course-unit.modal.container.cancel.button.text', defaultMessage: 'Cancel', }, + modalComponentSupportLabelFullySupported: { + id: 'course-authoring.course-unit.modal.component.support.label.fully-supported', + defaultMessage: 'Fully supported', + description: 'Label for advance problem type\'s support status with full platform support', + }, + modalComponentSupportLabelProvisionallySupported: { + id: 'course-authoring.course-unit.modal.component.support.label.provisionally-support', + defaultMessage: 'Provisionally supported', + description: 'Label for advance problem type\'s support status with provisional platform support', + }, + modalComponentSupportLabelNotSupported: { + id: 'course-authoring.course-unit.modal.component.support.label.not-supported', + defaultMessage: 'Not supported', + description: 'Label for advance problem type\'s support status with no platform support', + }, + modalComponentSupportTooltipFullySupported: { + id: 'course-authoring.course-unit.modal.component.support.tooltip.fully-supported', + defaultMessage: 'Fully supported tools and features are available on edX, are ' + + 'fully tested, have user interfaces where applicable, and are documented in the ' + + 'official edX guides that are available on docs.edx.org.', + description: 'Message for support status tooltip for modules with full platform support', + }, + modalComponentSupportTooltipNotSupported: { + id: 'course-authoring.course-unit.modal.component.support.tooltip.not-supported', + defaultMessage: 'Tools with no support are not maintained by edX, and might be ' + + 'deprecated in the future. They are not recommended for use in courses due to ' + + 'non-compliance with one or more of the base requirements, such as testing, ' + + 'accessibility, internationalization, and documentation.', + description: 'Message for support status tooltip for modules which is not supported', + }, + modalComponentSupportTooltipProvisionallySupported: { + id: 'course-authoring.course-unit.modal.component.support.tooltip.provisionally-support', + defaultMessage: 'Provisionally supported tools might lack the robustness of functionality ' + + 'that your courses require. edX does not have control over the quality of the software, ' + + 'or of the content that can be provided using these tools. Test these tools thoroughly ' + + 'before using them in your course, especially in graded sections. Complete documentation ' + + 'might not be available for provisionally supported tools, or documentation might be ' + + 'available from sources other than edX.', + description: 'Message for support status tooltip for modules with provisional platform support', + }, }); export default messages; diff --git a/src/course-unit/constants.js b/src/course-unit/constants.js index 1351689a3..b7e7bf5c6 100644 --- a/src/course-unit/constants.js +++ b/src/course-unit/constants.js @@ -12,11 +12,13 @@ import { TextFields as TextFieldsIcon, VideoCamera as VideoCameraIcon, } from '@openedx/paragon/icons'; + import messages from './sidebar/messages'; +import addComponentMessages from './add-component/messages'; export const UNIT_ICON_TYPES = ['video', 'other', 'vertical', 'problem', 'lock']; -export const COMPONENT_ICON_TYPES = { +export const COMPONENT_TYPES = { advanced: 'advanced', discussion: 'discussion', library: 'library', @@ -36,14 +38,14 @@ export const TYPE_ICONS_MAP = { }; export const COMPONENT_TYPE_ICON_MAP = { - [COMPONENT_ICON_TYPES.advanced]: ScienceIcon, - [COMPONENT_ICON_TYPES.discussion]: QuestionAnswerOutlineIcon, - [COMPONENT_ICON_TYPES.library]: LibraryIcon, - [COMPONENT_ICON_TYPES.html]: TextFieldsIcon, - [COMPONENT_ICON_TYPES.openassessment]: EditNoteIcon, - [COMPONENT_ICON_TYPES.problem]: HelpOutlineIcon, - [COMPONENT_ICON_TYPES.video]: VideoCameraIcon, - [COMPONENT_ICON_TYPES.dragAndDrop]: BackHandIcon, + [COMPONENT_TYPES.advanced]: ScienceIcon, + [COMPONENT_TYPES.discussion]: QuestionAnswerOutlineIcon, + [COMPONENT_TYPES.library]: LibraryIcon, + [COMPONENT_TYPES.html]: TextFieldsIcon, + [COMPONENT_TYPES.openassessment]: EditNoteIcon, + [COMPONENT_TYPES.problem]: HelpOutlineIcon, + [COMPONENT_TYPES.video]: VideoCameraIcon, + [COMPONENT_TYPES.dragAndDrop]: BackHandIcon, }; export const getUnitReleaseStatus = (intl) => ({ @@ -68,3 +70,18 @@ export const PUBLISH_TYPES = { discardChanges: 'discard_changes', makePublic: 'make_public', }; + +export const getXBlockSupportMessages = (intl) => ({ + fs: { // Fully supported + label: intl.formatMessage(addComponentMessages.modalComponentSupportLabelFullySupported), + tooltip: intl.formatMessage(addComponentMessages.modalComponentSupportTooltipFullySupported), + }, + ps: { // Provisionally supported + label: intl.formatMessage(addComponentMessages.modalComponentSupportLabelProvisionallySupported), + tooltip: intl.formatMessage(addComponentMessages.modalComponentSupportTooltipProvisionallySupported), + }, + us: { // Not supported + label: intl.formatMessage(addComponentMessages.modalComponentSupportLabelNotSupported), + tooltip: intl.formatMessage(addComponentMessages.modalComponentSupportTooltipNotSupported), + }, +}); diff --git a/src/course-unit/course-xblock/CourseXBlock.jsx b/src/course-unit/course-xblock/CourseXBlock.jsx index cfb847371..237a9c95a 100644 --- a/src/course-unit/course-xblock/CourseXBlock.jsx +++ b/src/course-unit/course-xblock/CourseXBlock.jsx @@ -11,7 +11,7 @@ import { useNavigate } from 'react-router-dom'; import DeleteModal from '../../generic/delete-modal/DeleteModal'; import { scrollToElement } from '../../course-outline/utils'; import { getCourseId } from '../data/selectors'; -import { COMPONENT_ICON_TYPES } from '../constants'; +import { COMPONENT_TYPES } from '../constants'; import messages from './messages'; const CourseXBlock = ({ @@ -30,9 +30,9 @@ const CourseXBlock = ({ const handleEdit = () => { switch (type) { - case COMPONENT_ICON_TYPES.html: - case COMPONENT_ICON_TYPES.problem: - case COMPONENT_ICON_TYPES.video: + case COMPONENT_TYPES.html: + case COMPONENT_TYPES.problem: + case COMPONENT_TYPES.video: navigate(`/course/${courseId}/editor/${type}/${id}`); break; default: diff --git a/src/course-unit/course-xblock/CourseXBlock.test.jsx b/src/course-unit/course-xblock/CourseXBlock.test.jsx index f07997c33..6be85f150 100644 --- a/src/course-unit/course-xblock/CourseXBlock.test.jsx +++ b/src/course-unit/course-xblock/CourseXBlock.test.jsx @@ -6,7 +6,7 @@ import { camelCaseObject, initializeMockApp } from '@edx/frontend-platform'; import { AppProvider } from '@edx/frontend-platform/react'; import { getCourseId } from '../data/selectors'; -import { COMPONENT_ICON_TYPES } from '../constants'; +import { COMPONENT_TYPES } from '../constants'; import { courseVerticalChildrenMock } from '../__mocks__'; import CourseXBlock from './CourseXBlock'; @@ -143,7 +143,7 @@ describe('', () => { describe('edit', () => { it('navigates to editor page on edit HTML xblock', () => { const { getByText, getByRole } = renderComponent({ - type: COMPONENT_ICON_TYPES.html, + type: COMPONENT_TYPES.html, }); const editButton = getByRole('button', { name: messages.blockAltButtonEdit.defaultMessage }); @@ -157,7 +157,7 @@ describe('', () => { it('navigates to editor page on edit Video xblock', () => { const { getByText, getByRole } = renderComponent({ - type: COMPONENT_ICON_TYPES.video, + type: COMPONENT_TYPES.video, }); const editButton = getByRole('button', { name: messages.blockAltButtonEdit.defaultMessage }); @@ -171,7 +171,7 @@ describe('', () => { it('navigates to editor page on edit Problem xblock', () => { const { getByText, getByRole } = renderComponent({ - type: COMPONENT_ICON_TYPES.problem, + type: COMPONENT_TYPES.problem, }); const editButton = getByRole('button', { name: messages.blockAltButtonEdit.defaultMessage });