Skip to content

Commit 2a8b2c5

Browse files
Merge remote-tracking branch 'gitHub/main' into task/main/DURACOM-453
2 parents a84e2d3 + efaf437 commit 2a8b2c5

15 files changed

Lines changed: 505 additions & 15 deletions

File tree

src/app/core/locale/locale.interceptor.spec.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ describe(`LocaleInterceptor`, () => {
2222
let localeService: any;
2323

2424
const languageList = ['en;q=1', 'it;q=0.9', 'de;q=0.8', 'fr;q=0.7'];
25+
const rootHref = 'https://sandbox.dspace.org/server/api';
2526

26-
const mockLocaleService = jasmine.createSpyObj('LocaleService', {
27-
getCurrentLanguageCode: jasmine.createSpy('getCurrentLanguageCode'),
28-
getLanguageCodeList: of(languageList),
29-
});
27+
const mockLocaleService = jasmine.createSpyObj('LocaleService', [
28+
'getCurrentLanguageCode',
29+
'getLanguageCodeList',
30+
]);
3031

3132
const mockHalEndpointService = {
3233
getRootHref: jasmine.createSpy('getRootHref'),
@@ -54,6 +55,8 @@ describe(`LocaleInterceptor`, () => {
5455
localeService = TestBed.inject(LocaleService);
5556

5657
localeService.getCurrentLanguageCode.and.returnValue(of('en'));
58+
localeService.getLanguageCodeList.and.returnValue(of(languageList));
59+
mockHalEndpointService.getRootHref.and.returnValue(rootHref);
5760
});
5861

5962
describe('', () => {
@@ -82,6 +85,29 @@ describe(`LocaleInterceptor`, () => {
8285
const lang = httpRequest.request.headers.get('Accept-Language');
8386
expect(lang).toBeDefined();
8487
expect(lang).toBe(languageList.toString());
88+
expect(localeService.getLanguageCodeList).toHaveBeenCalledWith(false);
89+
});
90+
91+
it('should ignore EPerson settings for root endpoint requests', () => {
92+
service.request(RestRequestMethod.GET, rootHref).subscribe((response) => {
93+
expect(response).toBeTruthy();
94+
});
95+
96+
httpMock.expectOne(rootHref);
97+
98+
expect(localeService.getLanguageCodeList).toHaveBeenCalledWith(true);
99+
});
100+
101+
it('should ignore EPerson settings for eperson endpoint requests', () => {
102+
const epersonHref = `${rootHref}/eperson/epersons/1234`;
103+
104+
service.request(RestRequestMethod.GET, epersonHref).subscribe((response) => {
105+
expect(response).toBeTruthy();
106+
});
107+
108+
httpMock.expectOne(epersonHref);
109+
110+
expect(localeService.getLanguageCodeList).toHaveBeenCalledWith(true);
85111
});
86112

87113
});

src/app/core/locale/locale.interceptor.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ export class LocaleInterceptor implements HttpInterceptor {
3131
*/
3232
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
3333
let newReq: HttpRequest<any>;
34-
return this.localeService.getLanguageCodeList(req.url === this.halEndpointService.getRootHref())
34+
const ignoreEPersonSettings: boolean = this.shouldIgnoreEPersonSettings(req.url);
35+
36+
return this.localeService.getLanguageCodeList(ignoreEPersonSettings)
3537
.pipe(
3638
take(1),
3739
scan((acc: any, value: any) => [...acc, value], []),
@@ -45,4 +47,12 @@ export class LocaleInterceptor implements HttpInterceptor {
4547
return next.handle(newReq);
4648
}));
4749
}
50+
51+
/**
52+
* Avoid recursive EPerson language lookup for requests that are needed to resolve EPerson itself.
53+
*/
54+
private shouldIgnoreEPersonSettings(url: string): boolean {
55+
const rootHref = this.halEndpointService.getRootHref();
56+
return url === rootHref || url.startsWith(`${rootHref}/eperson/epersons`);
57+
}
4858
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
@if (licenses.length > 0 || uris.length > 0) {
2+
<div class="item-page-field">
3+
@if ((hasCcLicenseName$ | async) && (hasCcLicenseUri$ | async)) {
4+
<ds-item-page-cc-license-field [item]="item" [variant]="'full'"></ds-item-page-cc-license-field>
5+
} @else {
6+
<ds-metadata-field-wrapper [label]="'item.page.license.title' | translate">
7+
@if (licenses.length === uris.length) {
8+
@for (license of licenses; track license; let last=$last; let i=$index) {
9+
<a [href]="uris[i]" target="_blank" class="license-link"><span class="license-text">{{ license }}</span></a>
10+
@if (!last) {
11+
<span class="separator" [innerHTML]="separator"></span>
12+
}
13+
}
14+
} @else {
15+
@for (license of licenses; track license; let last=$last) {
16+
<span class="license-text">{{ license }}</span>
17+
@if (!last || uris.length > 0) {
18+
<span class="separator" [innerHTML]="separator"></span>
19+
}
20+
}
21+
@for (uri of uris; track uri; let last=$last) {
22+
<a [href]="uri" target="_blank" class="license-link"><span class="license-text">{{ uri }}</span></a>
23+
@if (!last) {
24+
<span class="separator" [innerHTML]="separator"></span>
25+
}
26+
}
27+
}
28+
</ds-metadata-field-wrapper>
29+
}
30+
</div>
31+
}

0 commit comments

Comments
 (0)