diff --git a/src/course-outline/CourseOutline.scss b/src/course-outline/CourseOutline.scss index 94ca859d07..f7fff905fb 100644 --- a/src/course-outline/CourseOutline.scss +++ b/src/course-outline/CourseOutline.scss @@ -7,4 +7,5 @@ @import "./empty-placeholder/EmptyPlaceholder"; @import "./highlights-modal/HighlightsModal"; @import "./publish-modal/PublishModal"; +@import "../generic/drag-helper/SortableItem"; @import "./xblock-status/XBlockStatus"; diff --git a/src/course-unit/CourseUnit.test.jsx b/src/course-unit/CourseUnit.test.jsx index cec2b09768..a5976e87bc 100644 --- a/src/course-unit/CourseUnit.test.jsx +++ b/src/course-unit/CourseUnit.test.jsx @@ -597,6 +597,14 @@ describe('', () => { name: 'New Cloned XBlock', block_id: '1234567890', block_type: 'drag-and-drop-v2', + actions: { + canCopy: true, + canDuplicate: true, + canMove: true, + canManageAccess: true, + canManageTags: true, + canDelete: true, + }, user_partition_info: {}, }, ], @@ -990,10 +998,7 @@ describe('', () => { children: [ { ...courseVerticalChildrenMock.children[0], - actions: { - ...courseVerticalChildrenMock.children[0].actions, - updatedXBlockActions, - }, + actions: updatedXBlockActions, }, ], }); @@ -1009,7 +1014,7 @@ describe('', () => { const moveBtn = queryByRole('button', { name: courseXBlockMessages.blockLabelButtonMove.defaultMessage }); const copyToClipboardBtn = queryByRole('button', { name: courseXBlockMessages.blockLabelButtonCopyToClipboard.defaultMessage }); const manageAccessBtn = queryByRole('button', { name: courseXBlockMessages.blockLabelButtonManageAccess.defaultMessage }); - const manageTagsBtn = queryByRole('button', { name: courseXBlockMessages.blockLabelButtonManageTags.defaultMessage }); + const manageTagsBtn = queryByRole('link', { name: courseXBlockMessages.blockLabelButtonManageTags.defaultMessage }); expect(deleteBtn).not.toBeInTheDocument(); expect(duplicateBtn).not.toBeInTheDocument(); diff --git a/src/course-unit/course-xblock/CourseXBlock.jsx b/src/course-unit/course-xblock/CourseXBlock.jsx index eeb959cd85..f1e2698dd0 100644 --- a/src/course-unit/course-xblock/CourseXBlock.jsx +++ b/src/course-unit/course-xblock/CourseXBlock.jsx @@ -2,7 +2,6 @@ import { memo, useEffect, useRef, useMemo, useState, } from 'react'; import PropTypes from 'prop-types'; -import classNames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { ActionRow, Card, Dropdown, Icon, IconButton, useToggle, Sheet, OverlayTrigger, Tooltip, Button, diff --git a/src/course-unit/course-xblock/CourseXBlock.scss b/src/course-unit/course-xblock/CourseXBlock.scss index 05aabb693b..7eeb06c90a 100644 --- a/src/course-unit/course-xblock/CourseXBlock.scss +++ b/src/course-unit/course-xblock/CourseXBlock.scss @@ -22,11 +22,6 @@ font-size: $font-size-sm; } - .pgn__card-header-subtitle-md { - margin-top: 0; - font-size: 1rem; - } - .pgn__card-header-title-md { font: 700 1.375rem/1.75rem $font-family-sans-serif; color: $black; diff --git a/src/course-unit/course-xblock/messages.js b/src/course-unit/course-xblock/messages.js index a67aeff2c0..1343b0783c 100644 --- a/src/course-unit/course-xblock/messages.js +++ b/src/course-unit/course-xblock/messages.js @@ -54,14 +54,6 @@ const messages = defineMessages({ id: 'course-authoring.course-unit.xblock.button.manageTags.label', defaultMessage: 'Manage tags', }, - visibilityMessage: { - id: 'course-authoring.course-unit.xblock.visibility.message', - defaultMessage: 'Access restricted to: {selectedGroupsLabel}', - }, - validationSummary: { - id: 'course-authoring.course-unit.xblock.validation.summary', - defaultMessage: 'This component has validation issues.', - }, expandTooltip: { id: 'course-authoring.course-unit.xblock.expandTooltip', defaultMessage: 'Collapse/Expand this block', diff --git a/src/course-unit/header-title/HeaderTitle.jsx b/src/course-unit/header-title/HeaderTitle.jsx index 734df5b449..0d29404ba6 100644 --- a/src/course-unit/header-title/HeaderTitle.jsx +++ b/src/course-unit/header-title/HeaderTitle.jsx @@ -50,7 +50,7 @@ const HeaderTitle = ({ return ( <> -
+
{isTitleEditFormOpen ? ( ', () => { await expect(uploadAssets(courseId, fileData, () => {})).rejects.toThrow('Network Error'); }); + it('displays an error message when the file size exceeds the limit', async () => { + const maxSizeInBytes = 20 * 1000 * 1000; + + const { getByText, getByRole } = render(); + const dropzoneInput = getByRole('presentation', { hidden: true }); + + const imageFile = new File( + [new ArrayBuffer(maxSizeInBytes + 1)], + 'test-file.png', + { type: 'image/png' }, + ); + + userEvent.upload(dropzoneInput.firstChild, imageFile); + + await waitFor(() => { + // Assert that the error message is displayed + const maxSizeInMB = maxSizeInBytes / (1000 * 1000); + const expectedErrorMessage = messages.uploadImageDropzoneInvalidSizeMore + .defaultMessage.replace('{maxSize}', maxSizeInMB); + expect(getByText(expectedErrorMessage)).toBeInTheDocument(); + }); + }); + it('displays a custom error message when the file size exceeds the limit', async () => { const maxSizeInBytes = 20 * 1000 * 1000; const expectedErrorMessage = 'Custom error message'; @@ -144,13 +167,13 @@ describe('', () => { ); const dropzoneInput = getByRole('presentation', { hidden: true }); - const fileToUpload = new File( + const imageFile = new File( [new ArrayBuffer(maxSizeInBytes + 1)], 'test-file.png', { type: 'image/png' }, ); - userEvent.upload(dropzoneInput.firstChild, fileToUpload); + userEvent.upload(dropzoneInput.firstChild, imageFile); await waitFor(() => { expect(getByText(expectedErrorMessage)).toBeInTheDocument();