Skip to content

Commit 8017155

Browse files
committed
feat: Add error messages for partial migration
1 parent 191be55 commit 8017155

6 files changed

Lines changed: 128 additions & 4 deletions

File tree

src/legacy-libraries-migration/LegacyLibMigrationPage.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ describe('<LegacyLibMigrationPage />', () => {
399399
expect(axiosMock.history.post[0].data).toBe(
400400
'{"sources":["library-v1:MBA+123","library-v1:UNIX+LG1","library-v1:MBA+1234"],"target":"lib:SampleTaxonomyOrg1:TL1","create_collections":true,"repeat_handling_strategy":"fork"}',
401401
);
402-
expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration failed.');
402+
expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration have failed');
403403
});
404404

405405
it('should show help sidebar', async () => {

src/legacy-libraries-migration/data/api.mocks.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ export async function mockGetMigrationStatus(migrationId: string): Promise<api.M
66
return mockGetMigrationStatus.migrationStatusData;
77
case mockGetMigrationStatus.migrationIdFailed:
88
return mockGetMigrationStatus.migrationStatusFailedData;
9+
case mockGetMigrationStatus.migrationIdMultiple:
10+
return mockGetMigrationStatus.migrationStatusFailedMultipleData;
11+
case mockGetMigrationStatus.migrationIdOneLibrary:
12+
return mockGetMigrationStatus.migrationStatusFailedOneLibraryData;
913
default:
1014
/* istanbul ignore next */
1115
throw new Error(`mockGetMigrationStatus: unknown migration ID "${migrationId}"`);
@@ -32,6 +36,7 @@ mockGetMigrationStatus.migrationStatusData = {
3236
preserveUrlSlugs: false,
3337
targetCollectionSlug: 'coll-1',
3438
forwardSourceToTarget: true,
39+
isFailed: false,
3540
},
3641
],
3742
} as api.MigrateTaskStatusData;
@@ -55,6 +60,75 @@ mockGetMigrationStatus.migrationStatusFailedData = {
5560
preserveUrlSlugs: false,
5661
targetCollectionSlug: 'coll-1',
5762
forwardSourceToTarget: true,
63+
isFailed: true,
64+
},
65+
],
66+
} as api.MigrateTaskStatusData;
67+
mockGetMigrationStatus.migrationIdMultiple = '3';
68+
mockGetMigrationStatus.migrationStatusFailedMultipleData = {
69+
uuid: mockGetMigrationStatus.migrationId,
70+
state: 'Succeeded',
71+
stateText: 'Succeeded',
72+
completedSteps: 9,
73+
totalSteps: 9,
74+
attempts: 1,
75+
created: '',
76+
modified: '',
77+
artifacts: [],
78+
parameters: [
79+
{
80+
source: 'legacy-lib-1',
81+
target: 'lib',
82+
compositionLevel: 'component',
83+
repeatHandlingStrategy: 'update',
84+
preserveUrlSlugs: false,
85+
targetCollectionSlug: 'coll-1',
86+
forwardSourceToTarget: true,
87+
isFailed: true,
88+
},
89+
{
90+
source: 'legacy-lib-2',
91+
target: 'lib',
92+
compositionLevel: 'component',
93+
repeatHandlingStrategy: 'update',
94+
preserveUrlSlugs: false,
95+
targetCollectionSlug: 'coll-1',
96+
forwardSourceToTarget: true,
97+
isFailed: true,
98+
},
99+
],
100+
} as api.MigrateTaskStatusData;
101+
mockGetMigrationStatus.migrationIdOneLibrary = '4';
102+
mockGetMigrationStatus.migrationStatusFailedOneLibraryData = {
103+
uuid: mockGetMigrationStatus.migrationId,
104+
state: 'Succeeded',
105+
stateText: 'Succeeded',
106+
completedSteps: 9,
107+
totalSteps: 9,
108+
attempts: 1,
109+
created: '',
110+
modified: '',
111+
artifacts: [],
112+
parameters: [
113+
{
114+
source: 'legacy-lib-1',
115+
target: 'lib',
116+
compositionLevel: 'component',
117+
repeatHandlingStrategy: 'update',
118+
preserveUrlSlugs: false,
119+
targetCollectionSlug: 'coll-1',
120+
forwardSourceToTarget: true,
121+
isFailed: true,
122+
},
123+
{
124+
source: 'legacy-lib-2',
125+
target: 'lib',
126+
compositionLevel: 'component',
127+
repeatHandlingStrategy: 'update',
128+
preserveUrlSlugs: false,
129+
targetCollectionSlug: 'coll-1',
130+
forwardSourceToTarget: true,
131+
isFailed: false,
58132
},
59133
],
60134
} as api.MigrateTaskStatusData;

src/legacy-libraries-migration/data/api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface MigrateArtifacts {
2121
preserveUrlSlugs: boolean;
2222
targetCollectionSlug: string;
2323
forwardSourceToTarget: boolean;
24+
isFailed: boolean;
2425
}
2526

2627
export interface MigrateTaskStatusData {

src/legacy-libraries-migration/messages.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,19 @@ const messages = defineMessages({
141141
},
142142
migrationFailed: {
143143
id: 'legacy-libraries-migration.confirmation-step.toast.migration-failed',
144-
defaultMessage: 'Legacy libraries migration failed.',
144+
defaultMessage: 'Legacy libraries migration have failed',
145145
description: 'Toast message that indicates the migration of legacy libraries is failed',
146146
},
147+
migrationFailedMultiple: {
148+
id: 'legacy-libraries-migration.confirmation-step.toast.migration-multiple-failed',
149+
defaultMessage: 'Multiple legacy libraries have failed',
150+
description: 'Toast message that indicates the migration of legacy libraries is failed',
151+
},
152+
migrationFailedOneLibrary: {
153+
id: 'legacy-libraries-migration.confirmation-step.toast.migration-one-failed',
154+
defaultMessage: 'The legacy library with this key has failed: {key}',
155+
description: 'Toast message that indicates that one legacy library has failed in the migration',
156+
},
147157
migrationSuccess: {
148158
id: 'legacy-libraries-migration.confirmation-step.toast.migration-success',
149159
defaultMessage: 'The migration of legacy libraries has been completed successfully.',

src/library-authoring/LibraryAuthoringPage.test.tsx

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,32 @@ describe('<LibraryAuthoringPage />', () => {
10891089
},
10901090
});
10911091

1092-
await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration failed.'));
1092+
await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Legacy libraries migration have failed'));
1093+
});
1094+
1095+
it('Should show fail multiple legacy libraries in a migration', async () => {
1096+
render(<LibraryLayout />, {
1097+
path,
1098+
routerProps: {
1099+
initialEntries: [
1100+
`/library/${mockContentLibrary.libraryId}?migration_task=${mockGetMigrationStatus.migrationIdMultiple}`,
1101+
],
1102+
},
1103+
});
1104+
1105+
await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('Multiple legacy libraries have failed'));
1106+
});
1107+
1108+
it('Should show fail one legacy library in a migration', async () => {
1109+
render(<LibraryLayout />, {
1110+
path,
1111+
routerProps: {
1112+
initialEntries: [
1113+
`/library/${mockContentLibrary.libraryId}?migration_task=${mockGetMigrationStatus.migrationIdOneLibrary}`,
1114+
],
1115+
},
1116+
});
1117+
1118+
await waitFor(() => expect(mockShowToast).toHaveBeenCalledWith('The legacy library with this key has failed: legacy-lib-1'));
10931119
});
10941120
});

src/library-authoring/LibraryAuthoringPage.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,20 @@ const LibraryAuthoringPage = ({
225225
if (migrationId) {
226226
let deleteMigrationIdParam = false;
227227
if (migrationStatusData?.state === 'Succeeded') {
228-
showToast(intl.formatMessage(migrationMessages.migrationSuccess));
228+
// Verify if there is some failed libraries
229+
const failedMigrations = migrationStatusData.parameters.filter(item => item.isFailed);
230+
if (failedMigrations.length > 1) {
231+
showToast(intl.formatMessage(migrationMessages.migrationFailedMultiple));
232+
} else if (failedMigrations.length === 1) {
233+
showToast(intl.formatMessage(
234+
migrationMessages.migrationFailedOneLibrary,
235+
{
236+
key: failedMigrations[0].source,
237+
},
238+
));
239+
} else {
240+
showToast(intl.formatMessage(migrationMessages.migrationSuccess));
241+
}
229242
queryClient.invalidateQueries({ predicate: (query) => libraryQueryPredicate(query, libraryId) });
230243
deleteMigrationIdParam = true;
231244
} else if (migrationStatusData?.state === 'Failed') {

0 commit comments

Comments
 (0)