diff --git a/src/course-unit/add-component/AddComponent.test.tsx b/src/course-unit/add-component/AddComponent.test.tsx index b10a864f2d..39fc302a1b 100644 --- a/src/course-unit/add-component/AddComponent.test.tsx +++ b/src/course-unit/add-component/AddComponent.test.tsx @@ -745,6 +745,41 @@ describe('', () => { expect(screen.getByRole('button')).not.toBeDisabled(); }); + it('passes boilerplate name when clicking a generic container block button', async () => { + axiosMock + .onGet(getCourseSectionVerticalApiUrl(blockId)) + .reply(200, { + ...courseSectionVerticalMock, + component_templates: [ + { + type: 'pb-message', + display_name: 'Message (complete)', + templates: [{ + display_name: 'Message (complete)', + category: 'pb-message', + boilerplate_name: 'pb-message-complete', + }], + support_legend: { show_legend: false }, + }, + ], + }); + await executeThunk(fetchCourseSectionVerticalData(blockId), store.dispatch); + + const user = userEvent.setup(); + renderComponent(); + + await user.click(screen.getByRole('button', { + name: new RegExp(`${messages.buttonText.defaultMessage} Message \\(complete\\)`, 'i'), + })); + + expect(handleCreateNewCourseXBlockMock).toHaveBeenCalledWith({ + type: 'pb-message', + category: 'pb-message', + boilerplate: 'pb-message-complete', + parentLocator: blockId, + }); + }); + describe('component support label', () => { it('component support label is hidden if component support legend is disabled', async () => { const supportLevels = ['fs', 'ps']; diff --git a/src/course-unit/add-component/AddComponent.tsx b/src/course-unit/add-component/AddComponent.tsx index 2a929e205e..4cf6360a60 100644 --- a/src/course-unit/add-component/AddComponent.tsx +++ b/src/course-unit/add-component/AddComponent.tsx @@ -231,7 +231,14 @@ const AddComponent = ({ // Generic handler for container-specific block types declared via // StudioContainerWithNestedXBlocksMixin.allowed_nested_blocks that are // not one of the MFE's built-in component types (html, video, problem…). - handleCreateNewCourseXBlock({ type, category: type, parentLocator: blockId }); + // Pass boilerplate so that blocks with multiple templates (e.g. pb-message) + // get initialised with the correct template content instead of the default. + handleCreateNewCourseXBlock({ + type, + category: type, + boilerplate: moduleName, + parentLocator: blockId, + }); } }; @@ -283,7 +290,7 @@ const AddComponent = ({ return (
  • handleCreateNewXBlock(type)} + onClick={() => handleCreateNewXBlock(type, firstTemplate?.boilerplateName)} displayName={displayName} type={type} beta={beta}