diff --git a/src/library-authoring/add-content/AddContentContainer.test.tsx b/src/library-authoring/add-content/AddContentContainer.test.tsx
index a67c4f995..5832b6f66 100644
--- a/src/library-authoring/add-content/AddContentContainer.test.tsx
+++ b/src/library-authoring/add-content/AddContentContainer.test.tsx
@@ -77,7 +77,7 @@ describe('', () => {
});
it('should handle failure to paste content', async () => {
- const { axiosMock } = initializeMocks();
+ const { axiosMock, mockShowToast } = initializeMocks();
// Simulate having an HTML block in the clipboard:
mockClipboardHtml.applyMock();
@@ -89,8 +89,36 @@ describe('', () => {
const pasteButton = await screen.findByRole('button', { name: /paste from clipboard/i });
fireEvent.click(pasteButton);
- await waitFor(() => expect(axiosMock.history.post[0].url).toEqual(pasteUrl));
+ await waitFor(() => {
+ expect(axiosMock.history.post[0].url).toEqual(pasteUrl);
+ expect(mockShowToast).toHaveBeenCalledWith('There was an error pasting the content.');
+ });
+ });
+
+ it('should handle failure to paste content and show server error if available', async () => {
+ const { axiosMock, mockShowToast } = initializeMocks();
+ // Simulate having an HTML block in the clipboard:
+ mockClipboardHtml.applyMock();
+
+ const errMsg = 'Libraries do not support this type of content yet.';
+ const pasteUrl = getLibraryPasteClipboardUrl(libraryId);
+
+ // eslint-disable-next-line prefer-promise-reject-errors
+ axiosMock.onPost(pasteUrl).reply(() => Promise.reject({
+ customAttributes: {
+ httpErrorStatus: 400,
+ httpErrorResponseData: JSON.stringify({ block_type: errMsg }),
+ },
+ }));
+
+ render();
+
+ const pasteButton = await screen.findByRole('button', { name: /paste from clipboard/i });
+ fireEvent.click(pasteButton);
- // TODO: check that an actual error message is shown?!
+ await waitFor(() => {
+ expect(axiosMock.history.post[0].url).toEqual(pasteUrl);
+ expect(mockShowToast).toHaveBeenCalledWith(errMsg);
+ });
});
});
diff --git a/src/library-authoring/add-content/AddContentContainer.tsx b/src/library-authoring/add-content/AddContentContainer.tsx
index d37fd75f0..ab1956320 100644
--- a/src/library-authoring/add-content/AddContentContainer.tsx
+++ b/src/library-authoring/add-content/AddContentContainer.tsx
@@ -73,6 +73,17 @@ const AddContentContainer = () => {
openComponentEditor,
} = useLibraryContext();
+ const parsePasteErrorMsg = (error) => {
+ let errMsg: string;
+ try {
+ const { customAttributes: { httpErrorResponseData } } = error;
+ errMsg = JSON.parse(httpErrorResponseData).block_type;
+ } catch (_err) {
+ errMsg = intl.formatMessage(messages.errorPasteClipboardMessage);
+ }
+ return errMsg;
+ };
+
const collectionButtonData = {
name: intl.formatMessage(messages.collectionButton),
disabled: false,
@@ -138,8 +149,8 @@ const AddContentContainer = () => {
blockId: `${uuid4()}`,
}).then(() => {
showToast(intl.formatMessage(messages.successPasteClipboardMessage));
- }).catch(() => {
- showToast(intl.formatMessage(messages.errorPasteClipboardMessage));
+ }).catch((error) => {
+ showToast(parsePasteErrorMsg(error));
});
} else if (blockType === 'collection') {
openCreateCollectionModal();