Skip to content

Commit 9e90732

Browse files
AdamF42Kim Shepherd
authored andcommitted
Merged in task/dspace-cris-2025_02_x/DSC-2812 (pull request DSpace#4646)
Task/dspace cris 2025 02 x/DSC-2812 Approved-by: Kim Shepherd
2 parents 1652a0a + 0d79a87 commit 9e90732

5 files changed

Lines changed: 39 additions & 5 deletions

src/app/core/data/dspace-rest-response-parsing.service.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,30 @@ describe('DspaceRestResponseParsingService', () => {
5353
expect(warnSpy).not.toHaveBeenCalled();
5454
});
5555

56+
it('does not replace self link when request URL contains a segment in SKIP_SELF_LINK_OVERRIDE', () => {
57+
const request = {
58+
uuid: 'request-id',
59+
href: 'https://rest.test/server/api/submission/workspaceitems/search/item?uuid=f639b124-1234-1234-1234-abcdef123456',
60+
method: RestRequestMethod.GET,
61+
} as RestRequest;
62+
const response: RawRestResponse = {
63+
payload: {
64+
_links: {
65+
self: {
66+
href: 'https://rest.test/server/api/submission/workspaceitems/123',
67+
},
68+
},
69+
},
70+
statusCode: 200,
71+
statusText: 'OK',
72+
};
73+
74+
const result = service.ensureSelfLinkForTest(request, response);
75+
76+
expect(result.payload._links.self.href).toBe('https://rest.test/server/api/submission/workspaceitems/123');
77+
expect(warnSpy).not.toHaveBeenCalled();
78+
});
79+
5680
it('replaces self link when path differs', () => {
5781
const request = {
5882
uuid: 'request-id',

src/app/core/data/dspace-rest-response-parsing.service.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ const splitUrlInParts = (url: string): string[] => {
6565
return normalizedUrl.split('/');
6666
};
6767

68+
/**
69+
* Path segments for which the self link override should be skipped.
70+
*/
71+
const SKIP_SELF_LINK_OVERRIDE: readonly string[] = [
72+
'workspaceitems',
73+
];
74+
6875
@Injectable({ providedIn: 'root' })
6976
export class DspaceRestResponseParsingService implements ResponseParsingService {
7077
protected serializerConstructor: GenericConstructor<Serializer<any>> = DSpaceSerializer;
@@ -169,7 +176,7 @@ export class DspaceRestResponseParsingService implements ResponseParsingService
169176
} else {
170177
const expected = splitUrlInParts(urlWithoutEmbedParams);
171178
const actual = splitUrlInParts(response.payload._links.self.href);
172-
if (expected[0] === actual[0] && (expected.some((e) => !actual.includes(e)) || actual.some((e) => !expected.includes(e)))) {
179+
if (expected[0] === actual[0] && !expected.some((e) => SKIP_SELF_LINK_OVERRIDE.includes(e)) && (expected.some((e) => !actual.includes(e)) || actual.some((e) => !expected.includes(e)))) {
173180
console.warn(`The response for '${urlWithoutEmbedParams}' has the self link '${response.payload._links.self.href}'. These don't match. This could mean there's an issue with the REST endpoint`);
174181
response.payload._links = Object.assign({}, response.payload._links, {
175182
self: {

src/app/my-dspace-page/my-dspace-configuration.service.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ describe('MyDSpaceConfigurationService', () => {
208208
b: [
209209
MyDSpaceConfigurationValueType.SupervisedItems,
210210
MyDSpaceConfigurationValueType.Workflow,
211+
MyDSpaceConfigurationValueType.OtherWorkspace,
211212
],
212213
}));
213214
});
@@ -223,6 +224,7 @@ describe('MyDSpaceConfigurationService', () => {
223224
b: [
224225
MyDSpaceConfigurationValueType.SupervisedItems,
225226
MyDSpaceConfigurationValueType.Workflow,
227+
MyDSpaceConfigurationValueType.OtherWorkspace,
226228
],
227229
}));
228230
});
@@ -237,9 +239,9 @@ describe('MyDSpaceConfigurationService', () => {
237239
expect(list$).toBeObservable(cold('(b|)', {
238240
b: [
239241
MyDSpaceConfigurationValueType.Workspace,
240-
MyDSpaceConfigurationValueType.OtherWorkspace,
241242
MyDSpaceConfigurationValueType.SupervisedItems,
242243
MyDSpaceConfigurationValueType.Workflow,
244+
MyDSpaceConfigurationValueType.OtherWorkspace,
243245
],
244246
}));
245247
});

src/app/my-dspace-page/my-dspace-configuration.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,12 @@ export class MyDSpaceConfigurationService extends SearchConfigurationService {
125125
const availableConf: MyDSpaceConfigurationValueType[] = [];
126126
if (isSubmitter) {
127127
availableConf.push(MyDSpaceConfigurationValueType.Workspace);
128-
availableConf.push(MyDSpaceConfigurationValueType.OtherWorkspace);
129128
}
130129
if (isController || isAdmin) {
131130
availableConf.push(MyDSpaceConfigurationValueType.SupervisedItems);
132131
availableConf.push(MyDSpaceConfigurationValueType.Workflow);
133132
}
133+
availableConf.push(MyDSpaceConfigurationValueType.OtherWorkspace);
134134
return availableConf;
135135
}));
136136
}

src/app/submission/submission.service.spec.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ describe('SubmissionService test suite', () => {
415415

416416
const searchService = getMockSearchService();
417417

418-
const requestServce = getMockRequestService();
418+
const requestService = getMockRequestService();
419419

420420
beforeEach(waitForAsync(() => {
421421

@@ -434,7 +434,7 @@ describe('SubmissionService test suite', () => {
434434
{ provide: SubmissionRestService, useValue: restService },
435435
{ provide: ActivatedRoute, useValue: new MockActivatedRoute() },
436436
{ provide: SearchService, useValue: searchService },
437-
{ provide: RequestService, useValue: requestServce },
437+
{ provide: RequestService, useValue: requestService },
438438
{ provide: SubmissionJsonPatchOperationsService, useValue: submissionJsonPatchOperationsService },
439439
{ provide: NativeWindowService, useValue: new NativeWindowRef() },
440440
ScrollToService,
@@ -1024,6 +1024,7 @@ describe('SubmissionService test suite', () => {
10241024
it('should redirect to Item page', () => {
10251025
scheduler = getTestScheduler();
10261026

1027+
(requestService.setStaleByHrefSubstring as jasmine.Spy).calls.reset();
10271028
const itemUuid = 'd62fc60f-e9a5-48e6-973a-90819acf23ae';
10281029
let itemSubmissionId = itemUuid + ':FULL';
10291030

0 commit comments

Comments
 (0)