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 payload = {
|
||||
foo: 'bar',
|
||||
followLink1: {},
|
||||
followLink2: {},
|
||||
_links: {
|
||||
self: Object.assign(new HALLink(), {
|
||||
href: 'self-test-link',
|
||||
@@ -407,7 +409,7 @@ describe('BaseDataService', () => {
|
||||
|
||||
expectObservable(service.findByHref(selfLink, false, false, ...linksToFollow)).toBe(expected, values);
|
||||
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);
|
||||
flush();
|
||||
expect(objectCache.addDependency).toHaveBeenCalledTimes(4);
|
||||
expect(objectCache.addDependency).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -282,9 +282,11 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
||||
// Ensure all followLinks from the cached object are automatically invalidated when invalidating the cached object
|
||||
tap((remoteDataObject: RemoteData<T>) => {
|
||||
if (hasValue(remoteDataObject?.payload?._links)) {
|
||||
for (const followLink of Object.values(remoteDataObject.payload._links)) {
|
||||
for (const followLinkName of Object.keys(remoteDataObject.payload._links)) {
|
||||
// only add the followLinks if they are embedded
|
||||
if (hasValue(remoteDataObject.payload[followLinkName]) && followLinkName !== 'self') {
|
||||
// followLink can be either an individual HALLink or a HALLink[]
|
||||
const followLinksList: HALLink[] = [].concat(followLink);
|
||||
const followLinksList: HALLink[] = [].concat(remoteDataObject.payload._links[followLinkName]);
|
||||
for (const individualFollowLink of followLinksList) {
|
||||
if (hasValue(individualFollowLink?.href)) {
|
||||
this.addDependency(response$, individualFollowLink.href);
|
||||
@@ -292,6 +294,7 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
@@ -334,9 +337,11 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
||||
if (hasValue(remoteDataObject?.payload?.page)) {
|
||||
for (const object of remoteDataObject.payload.page) {
|
||||
if (hasValue(object?._links)) {
|
||||
for (const followLink of Object.values(object._links)) {
|
||||
for (const followLinkName of Object.keys(object._links)) {
|
||||
// only add the followLinks if they are embedded
|
||||
if (hasValue(object[followLinkName]) && followLinkName !== 'self') {
|
||||
// followLink can be either an individual HALLink or a HALLink[]
|
||||
const followLinksList: HALLink[] = [].concat(followLink);
|
||||
const followLinksList: HALLink[] = [].concat(object._links[followLinkName]);
|
||||
for (const individualFollowLink of followLinksList) {
|
||||
if (hasValue(individualFollowLink?.href)) {
|
||||
this.addDependency(response$, individualFollowLink.href);
|
||||
@@ -346,6 +351,7 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user