Skip to content

Commit 8ddc621

Browse files
108915: Prevent self links & unresolved followLinks to be added as dependencies
1 parent ecb20bb commit 8ddc621

2 files changed

Lines changed: 22 additions & 14 deletions

File tree

src/app/core/data/base/base-data.service.spec.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ describe('BaseDataService', () => {
7878
const msToLive = 15 * 60 * 1000;
7979
const payload = {
8080
foo: 'bar',
81+
followLink1: {},
82+
followLink2: {},
8183
_links: {
8284
self: Object.assign(new HALLink(), {
8385
href: 'self-test-link',
@@ -407,7 +409,7 @@ describe('BaseDataService', () => {
407409

408410
expectObservable(service.findByHref(selfLink, false, false, ...linksToFollow)).toBe(expected, values);
409411
flush();
410-
expect(objectCache.addDependency).toHaveBeenCalledTimes(4);
412+
expect(objectCache.addDependency).toHaveBeenCalledTimes(3);
411413
});
412414
});
413415
});
@@ -610,7 +612,7 @@ describe('BaseDataService', () => {
610612

611613
expectObservable(service.findListByHref(selfLink, findListOptions, false, false, ...linksToFollow)).toBe(expected, values);
612614
flush();
613-
expect(objectCache.addDependency).toHaveBeenCalledTimes(4);
615+
expect(objectCache.addDependency).toHaveBeenCalledTimes(3);
614616
});
615617
});
616618
});

src/app/core/data/base/base-data.service.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,15 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
282282
// Ensure all followLinks from the cached object are automatically invalidated when invalidating the cached object
283283
tap((remoteDataObject: RemoteData<T>) => {
284284
if (hasValue(remoteDataObject?.payload?._links)) {
285-
for (const followLink of Object.values(remoteDataObject.payload._links)) {
286-
// followLink can be either an individual HALLink or a HALLink[]
287-
const followLinksList: HALLink[] = [].concat(followLink);
288-
for (const individualFollowLink of followLinksList) {
289-
if (hasValue(individualFollowLink?.href)) {
290-
this.addDependency(response$, individualFollowLink.href);
285+
for (const followLinkName of Object.keys(remoteDataObject.payload._links)) {
286+
// only add the followLinks if they are embedded
287+
if (hasValue(remoteDataObject.payload[followLinkName]) && followLinkName !== 'self') {
288+
// followLink can be either an individual HALLink or a HALLink[]
289+
const followLinksList: HALLink[] = [].concat(remoteDataObject.payload._links[followLinkName]);
290+
for (const individualFollowLink of followLinksList) {
291+
if (hasValue(individualFollowLink?.href)) {
292+
this.addDependency(response$, individualFollowLink.href);
293+
}
291294
}
292295
}
293296
}
@@ -334,12 +337,15 @@ export class BaseDataService<T extends CacheableObject> implements HALDataServic
334337
if (hasValue(remoteDataObject?.payload?.page)) {
335338
for (const object of remoteDataObject.payload.page) {
336339
if (hasValue(object?._links)) {
337-
for (const followLink of Object.values(object._links)) {
338-
// followLink can be either an individual HALLink or a HALLink[]
339-
const followLinksList: HALLink[] = [].concat(followLink);
340-
for (const individualFollowLink of followLinksList) {
341-
if (hasValue(individualFollowLink?.href)) {
342-
this.addDependency(response$, individualFollowLink.href);
340+
for (const followLinkName of Object.keys(object._links)) {
341+
// only add the followLinks if they are embedded
342+
if (hasValue(object[followLinkName]) && followLinkName !== 'self') {
343+
// followLink can be either an individual HALLink or a HALLink[]
344+
const followLinksList: HALLink[] = [].concat(object._links[followLinkName]);
345+
for (const individualFollowLink of followLinksList) {
346+
if (hasValue(individualFollowLink?.href)) {
347+
this.addDependency(response$, individualFollowLink.href);
348+
}
343349
}
344350
}
345351
}

0 commit comments

Comments
 (0)