mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
108915: Prevent self links & unresolved followLinks to be added as dependencies
This commit is contained in:
@@ -78,6 +78,8 @@ describe('BaseDataService', () => {
|
|||||||
const msToLive = 15 * 60 * 1000;
|
const msToLive = 15 * 60 * 1000;
|
||||||
const payload = {
|
const payload = {
|
||||||
foo: 'bar',
|
foo: 'bar',
|
||||||
|
followLink1: {},
|
||||||
|
followLink2: {},
|
||||||
_links: {
|
_links: {
|
||||||
self: Object.assign(new HALLink(), {
|
self: Object.assign(new HALLink(), {
|
||||||
href: 'self-test-link',
|
href: 'self-test-link',
|
||||||
@@ -407,7 +409,7 @@ describe('BaseDataService', () => {
|
|||||||
|
|
||||||
expectObservable(service.findByHref(selfLink, false, false, ...linksToFollow)).toBe(expected, values);
|
expectObservable(service.findByHref(selfLink, false, false, ...linksToFollow)).toBe(expected, values);
|
||||||
flush();
|
flush();
|
||||||
expect(objectCache.addDependency).toHaveBeenCalledTimes(4);
|
expect(objectCache.addDependency).toHaveBeenCalledTimes(3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -610,7 +612,7 @@ describe('BaseDataService', () => {
|
|||||||
|
|
||||||
expectObservable(service.findListByHref(selfLink, findListOptions, false, false, ...linksToFollow)).toBe(expected, values);
|
expectObservable(service.findListByHref(selfLink, findListOptions, false, false, ...linksToFollow)).toBe(expected, values);
|
||||||
flush();
|
flush();
|
||||||
expect(objectCache.addDependency).toHaveBeenCalledTimes(4);
|
expect(objectCache.addDependency).toHaveBeenCalledTimes(3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -282,12 +282,15 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
|||||||
// Ensure all followLinks from the cached object are automatically invalidated when invalidating the cached object
|
// Ensure all followLinks from the cached object are automatically invalidated when invalidating the cached object
|
||||||
tap((remoteDataObject: RemoteData<T>) => {
|
tap((remoteDataObject: RemoteData<T>) => {
|
||||||
if (hasValue(remoteDataObject?.payload?._links)) {
|
if (hasValue(remoteDataObject?.payload?._links)) {
|
||||||
for (const followLink of Object.values(remoteDataObject.payload._links)) {
|
for (const followLinkName of Object.keys(remoteDataObject.payload._links)) {
|
||||||
// followLink can be either an individual HALLink or a HALLink[]
|
// only add the followLinks if they are embedded
|
||||||
const followLinksList: HALLink[] = [].concat(followLink);
|
if (hasValue(remoteDataObject.payload[followLinkName]) && followLinkName !== 'self') {
|
||||||
for (const individualFollowLink of followLinksList) {
|
// followLink can be either an individual HALLink or a HALLink[]
|
||||||
if (hasValue(individualFollowLink?.href)) {
|
const followLinksList: HALLink[] = [].concat(remoteDataObject.payload._links[followLinkName]);
|
||||||
this.addDependency(response$, individualFollowLink.href);
|
for (const individualFollowLink of followLinksList) {
|
||||||
|
if (hasValue(individualFollowLink?.href)) {
|
||||||
|
this.addDependency(response$, individualFollowLink.href);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -334,12 +337,15 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
|||||||
if (hasValue(remoteDataObject?.payload?.page)) {
|
if (hasValue(remoteDataObject?.payload?.page)) {
|
||||||
for (const object of remoteDataObject.payload.page) {
|
for (const object of remoteDataObject.payload.page) {
|
||||||
if (hasValue(object?._links)) {
|
if (hasValue(object?._links)) {
|
||||||
for (const followLink of Object.values(object._links)) {
|
for (const followLinkName of Object.keys(object._links)) {
|
||||||
// followLink can be either an individual HALLink or a HALLink[]
|
// only add the followLinks if they are embedded
|
||||||
const followLinksList: HALLink[] = [].concat(followLink);
|
if (hasValue(object[followLinkName]) && followLinkName !== 'self') {
|
||||||
for (const individualFollowLink of followLinksList) {
|
// followLink can be either an individual HALLink or a HALLink[]
|
||||||
if (hasValue(individualFollowLink?.href)) {
|
const followLinksList: HALLink[] = [].concat(object._links[followLinkName]);
|
||||||
this.addDependency(response$, individualFollowLink.href);
|
for (const individualFollowLink of followLinksList) {
|
||||||
|
if (hasValue(individualFollowLink?.href)) {
|
||||||
|
this.addDependency(response$, individualFollowLink.href);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user