Skip to content

Commit f531d54

Browse files
fix: merge errors in previous commit (#1819)
1 parent f24b89c commit f531d54

4 files changed

Lines changed: 61 additions & 6 deletions

File tree

src/library-authoring/collections/LibraryCollectionPage.test.tsx

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ import { mockContentSearchConfig, mockGetBlockTypes } from '../../search-manager
2121
import { mockClipboardEmpty } from '../../generic/data/api.mock';
2222
import { LibraryLayout } from '..';
2323
import { ContentTagsDrawer } from '../../content-tags-drawer';
24-
import { getLibraryCollectionItemsApiUrl } from '../data/api';
24+
import {
25+
getLibraryCollectionItemsApiUrl,
26+
getLibraryContainersApiUrl,
27+
} from '../data/api';
2528

2629
let axiosMock: MockAdapter;
2730
let mockShowToast;
@@ -406,4 +409,56 @@ describe('<LibraryCollectionPage />', () => {
406409
// Should close sidebar as component was removed
407410
await waitFor(() => expect(screen.queryByTestId('library-sidebar')).not.toBeInTheDocument());
408411
});
412+
413+
it('should create a unit inside a collection', async () => {
414+
await renderLibraryCollectionPage();
415+
const unitTitle = 'This is a Test';
416+
const containerUrl = getLibraryContainersApiUrl(mockContentLibrary.libraryId);
417+
axiosMock.onPost(containerUrl).reply(200, {
418+
id: 'unit-1',
419+
slug: 'this-is-a-test',
420+
title: unitTitle,
421+
});
422+
const collectionUrl = getLibraryCollectionItemsApiUrl(
423+
mockContentLibrary.libraryId,
424+
mockCollection.collectionId,
425+
);
426+
axiosMock.onPatch(collectionUrl).reply(200);
427+
428+
expect(await screen.findByRole('heading')).toBeInTheDocument();
429+
expect(screen.queryByText(/add content/i)).not.toBeInTheDocument();
430+
431+
// Open Add content sidebar
432+
const newButton = screen.getByRole('button', { name: /new/i });
433+
fireEvent.click(newButton);
434+
expect(screen.getByText(/add content/i)).toBeInTheDocument();
435+
436+
// Open New unit Modal
437+
const sidebar = screen.getByTestId('library-sidebar');
438+
const newUnitButton = within(sidebar).getAllByRole('button', { name: /unit/i })[0];
439+
fireEvent.click(newUnitButton);
440+
const unitModalHeading = await screen.findByRole('heading', { name: /new unit/i });
441+
expect(unitModalHeading).toBeInTheDocument();
442+
443+
// Fill the form
444+
const createButton = screen.getByRole('button', { name: /create/i });
445+
const nameField = screen.getByRole('textbox', { name: /name your unit/i });
446+
447+
fireEvent.change(nameField, { target: { value: unitTitle } });
448+
fireEvent.click(createButton);
449+
450+
// Check success
451+
await waitFor(() => expect(axiosMock.history.post.length).toBe(1));
452+
453+
// Check that the unit was created
454+
expect(axiosMock.history.post[0].url).toBe(containerUrl);
455+
expect(axiosMock.history.post[0].data).toContain(`"display_name":"${unitTitle}"`);
456+
expect(axiosMock.history.post[0].data).toContain('"container_type":"unit"');
457+
expect(mockShowToast).toHaveBeenCalledWith('Unit created successfully');
458+
459+
// Check that the unit was added to the collection
460+
expect(axiosMock.history.patch.length).toBe(1);
461+
expect(axiosMock.history.patch[0].url).toBe(collectionUrl);
462+
expect(axiosMock.history.patch[0].data).toContain('"usage_keys":["unit-1"]');
463+
});
409464
});

src/library-authoring/create-unit/CreateUnitModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ const CreateUnitModal = () => {
3636
...values,
3737
});
3838
if (collectionId) {
39-
await updateItemsMutation.mutateAsync([container.containerKey]);
39+
await updateItemsMutation.mutateAsync([container.id]);
4040
}
4141
// Navigate to the new unit
42-
navigate(`/library/${libraryId}/unit/${container.containerKey}`);
42+
navigate(`/library/${libraryId}/unit/${container.id}`);
4343
showToast(intl.formatMessage(messages.createUnitSuccess));
4444
} catch (error) {
4545
showToast(intl.formatMessage(messages.createUnitError));

src/library-authoring/data/api.mocks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ mockGetContainerMetadata.containerData = {
500500
} satisfies api.Container;
501501
mockGetContainerMetadata.containerDataWithCollections = {
502502
...mockGetContainerMetadata.containerData,
503-
containerKey: mockGetContainerMetadata.containerIdWithCollections,
503+
id: mockGetContainerMetadata.containerIdWithCollections,
504504
collections: [{ title: 'My first collection', key: 'my-first-collection' }],
505505
} satisfies api.Container;
506506
/** Apply this mock. Returns a spy object that can tell you if it's been called. */

src/library-authoring/units/LibraryUnitPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ interface EditableTitleProps {
3434
const EditableTitle = ({ unitId }: EditableTitleProps) => {
3535
const intl = useIntl();
3636

37-
const { libraryId, readOnly } = useLibraryContext();
37+
const { readOnly } = useLibraryContext();
3838

39-
const { data: container } = useContainer(libraryId, unitId);
39+
const { data: container } = useContainer(unitId);
4040

4141
const updateMutation = useUpdateContainer(unitId);
4242
const { showToast } = useContext(ToastContext);

0 commit comments

Comments
 (0)