diff --git a/src/legacy-libraries-migration/LegacyLibMigrationPage.test.tsx b/src/legacy-libraries-migration/LegacyLibMigrationPage.test.tsx
index a752dc686b..79110706a7 100644
--- a/src/legacy-libraries-migration/LegacyLibMigrationPage.test.tsx
+++ b/src/legacy-libraries-migration/LegacyLibMigrationPage.test.tsx
@@ -418,7 +418,7 @@ describe('', () => {
expect(axiosMock.history.post[0].data).toBe(
'{"sources":["library-v1:MBA+123","library-v1:UNIX+LG1","library-v1:MBA+1234"],"target":"lib:SampleTaxonomyOrg1:TL1","create_collections":true,"repeat_handling_strategy":"fork"}',
);
- expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration failed.');
+ expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration have failed');
});
it('should show help sidebar', async () => {
diff --git a/src/legacy-libraries-migration/data/api.mocks.ts b/src/legacy-libraries-migration/data/api.mocks.ts
index a4d2d583ff..2386fb474c 100644
--- a/src/legacy-libraries-migration/data/api.mocks.ts
+++ b/src/legacy-libraries-migration/data/api.mocks.ts
@@ -6,6 +6,10 @@ export async function mockGetMigrationStatus(migrationId: string): Promise', () => {
},
});
- await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration failed.'));
+ await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration have failed'));
+ });
+
+ it('Should show fail multiple legacy libraries in a migration', async () => {
+ render(, {
+ path,
+ routerProps: {
+ initialEntries: [
+ `/library/${mockContentLibrary.libraryId}?migration_task=${mockGetMigrationStatus.migrationIdMultiple}`,
+ ],
+ },
+ });
+
+ await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Multiple legacy libraries have failed'));
+ });
+
+ it('Should show fail one legacy library in a migration', async () => {
+ render(, {
+ path,
+ routerProps: {
+ initialEntries: [
+ `/library/${mockContentLibrary.libraryId}?migration_task=${mockGetMigrationStatus.migrationIdOneLibrary}`,
+ ],
+ },
+ });
+
+ await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('The legacy library with this key has failed: legacy-lib-1'));
});
});
diff --git a/src/library-authoring/LibraryAuthoringPage.tsx b/src/library-authoring/LibraryAuthoringPage.tsx
index 90ee0040eb..63689635f6 100644
--- a/src/library-authoring/LibraryAuthoringPage.tsx
+++ b/src/library-authoring/LibraryAuthoringPage.tsx
@@ -225,10 +225,25 @@ const LibraryAuthoringPage = ({
if (migrationId) {
let deleteMigrationIdParam = false;
if (migrationStatusData?.state === 'Succeeded') {
- showToast(intl.formatMessage(migrationMessages.migrationSuccess));
+ // Check if any library migrations failed.
+ // A `Succeeded` state means that the bulk migration ended, but some libraries might have failed.
+ const failedMigrations = migrationStatusData.parameters.filter(item => item.isFailed);
+ if (failedMigrations.length > 1) {
+ showToast(intl.formatMessage(migrationMessages.migrationFailedMultiple));
+ } else if (failedMigrations.length === 1) {
+ showToast(intl.formatMessage(
+ migrationMessages.migrationFailedOneLibrary,
+ {
+ key: failedMigrations[0].source,
+ },
+ ));
+ } else {
+ showToast(intl.formatMessage(migrationMessages.migrationSuccess));
+ }
queryClient.invalidateQueries({ predicate: (query) => libraryQueryPredicate(query, libraryId) });
deleteMigrationIdParam = true;
} else if (migrationStatusData?.state === 'Failed') {
+ // A `Failed` state means that the entire bulk migration has failed.
showToast(intl.formatMessage(migrationMessages.migrationFailed));
deleteMigrationIdParam = true;
} else if (migrationStatusData?.state === 'Canceled') {