Skip to content

Commit c9dc0ef

Browse files
atarix83vins01-4science
authored andcommitted
Merged in task/dspace-cris-2023_02_x/DSC-2241 (pull request DSpace#3068)
[DSC-2241] Fix issue with signposting resolver when item has custom url Approved-by: Vincenzo Mecca
2 parents 948907f + 20d91d0 commit c9dc0ef

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/app/item-page/simple/link-resolver/signposting-links.resolver.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ import { SignpostingDataService } from '../../../core/data/signposting-data.serv
33
import { of } from 'rxjs';
44
import { TestBed } from '@angular/core/testing';
55
import { signpostingLinksResolver } from './signposting-links.resolver';
6+
import { ItemDataService } from '../../../core/data/item-data.service';
7+
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
8+
import { Item } from '../../../core/shared/item.model';
9+
import { MetadataMap } from '../../../core/shared/metadata.models';
10+
611
describe('signpostingLinksResolver', () => {
712
let resolver: any;
813
let route: ActivatedRouteSnapshot;
914
let state = {};
15+
let itemDataService: ItemDataService;
1016
let signpostingDataService: SignpostingDataService;
1117
const testUuid = '1234567890';
1218
const mocklink = {
@@ -24,12 +30,19 @@ describe('signpostingLinksResolver', () => {
2430
href: 'http://test2.org',
2531
rel: 'rel2',
2632
};
33+
const mockItem = Object.assign(new Item(), {
34+
uuid: testUuid,
35+
metadata: new MetadataMap()
36+
});
2737
function init() {
2838
route = Object.assign(new ActivatedRouteSnapshot(), {
2939
params: {
3040
id: testUuid,
3141
},
3242
});
43+
itemDataService = jasmine.createSpyObj('itemDataService', {
44+
findById: createSuccessfulRemoteDataObject$(mockItem)
45+
});
3346
signpostingDataService = jasmine.createSpyObj('signpostingDataService', {
3447
getLinks: of([mocklink, mocklink2]),
3548
setLinks: () => null,
@@ -41,6 +54,7 @@ describe('signpostingLinksResolver', () => {
4154
providers: [
4255
{provide: RouterStateSnapshot, useValue: state},
4356
{provide: ActivatedRouteSnapshot, useValue: route},
57+
{provide: ItemDataService, useValue: itemDataService},
4458
{provide: SignpostingDataService, useValue: signpostingDataService},
4559
]
4660
});
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
11
import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';
22
import { SignpostingLink } from '../../../core/data/signposting-links.model';
3-
import { Observable, of } from 'rxjs';
3+
import { Observable, of, switchMap } from 'rxjs';
44
import { inject } from '@angular/core';
55
import { hasValue } from '../../../shared/empty.util';
66
import { SignpostingDataService } from '../../../core/data/signposting-data.service';
7+
import { ItemDataService } from '../../../core/data/item-data.service';
8+
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
9+
import { RemoteData } from '../../../core/data/remote-data';
10+
import { Item } from '../../../core/shared/item.model';
11+
import { getItemPageLinksToFollow } from '../../item.resolver';
712

813
/**
914
* Resolver to retrieve signposting links before an eventual redirect of any route guard
1015
*
1116
* @param route
1217
* @param state
18+
* @param itemService
1319
* @param signpostingDataService
1420
*/
1521
export const signpostingLinksResolver: ResolveFn<Observable<SignpostingLink[]>> = (
1622
route: ActivatedRouteSnapshot,
1723
state: RouterStateSnapshot,
24+
itemService: ItemDataService = inject(ItemDataService),
1825
signpostingDataService: SignpostingDataService = inject(SignpostingDataService),
1926
): Observable<SignpostingLink[]> => {
2027
const uuid = route.params.id;
2128
if (!hasValue(uuid)) {
2229
return of([]);
2330
}
24-
return signpostingDataService.getLinks(uuid);
31+
return itemService.findById(uuid, true, true, ...getItemPageLinksToFollow(),).pipe(
32+
getFirstCompletedRemoteData(),
33+
switchMap((itemRD: RemoteData<Item>) => {
34+
return itemRD.hasSucceeded ? signpostingDataService.getLinks(itemRD.payload.uuid) : of([]);
35+
}),
36+
);
2537
};

0 commit comments

Comments
 (0)