From 566cc1634254de7ac9c972874295f3b815c29ed6 Mon Sep 17 00:00:00 2001 From: Don Richards <2738244+DonRichards@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:52:56 -0400 Subject: [PATCH 1/5] Add page reload after consent is changed. --- src/app/shared/cookies/browser-klaro.service.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index f673a417363..ba0ff576b3b 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -340,7 +340,20 @@ export class BrowserKlaroService extends KlaroService { * @param user */ updateSettingsForUsers(user: EPerson) { - this.setSettingsForUser(user, this.cookieService.get(this.getStorageName(user.uuid))); + this.setSettingsForUser(user, this.cookieService.get(this.getStorageName(user.uuid))) + .pipe(take(1)) // Ensures the observable completes after the first emitted value + .subscribe({ + next: (result) => { + // Logic to check if the settings were successfully updated + // This depends on how `setSettingsForUser` is implemented and what it returns + if (result.success) { + window.location.reload(); // Triggers the page reload + } + }, + error: (err) => { + console.error('Error updating user settings', err); + } + }); } /** From 9b0cdbc64e3e0d7ee8918a621c094c3c4e8f1631 Mon Sep 17 00:00:00 2001 From: Don Richards <2738244+DonRichards@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:06:05 -0400 Subject: [PATCH 2/5] Linting add trailing comma --- src/app/shared/cookies/browser-klaro.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index ba0ff576b3b..8d926407e2b 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -352,7 +352,7 @@ export class BrowserKlaroService extends KlaroService { }, error: (err) => { console.error('Error updating user settings', err); - } + }, }); } From 4afc7bb4db91622846b1097756b70551c82e8d02 Mon Sep 17 00:00:00 2001 From: Don Richards <2738244+DonRichards@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:20:39 -0400 Subject: [PATCH 3/5] Drop pipe since it failed to build --- src/app/shared/cookies/browser-klaro.service.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index 8d926407e2b..58eca876336 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -341,14 +341,10 @@ export class BrowserKlaroService extends KlaroService { */ updateSettingsForUsers(user: EPerson) { this.setSettingsForUser(user, this.cookieService.get(this.getStorageName(user.uuid))) - .pipe(take(1)) // Ensures the observable completes after the first emitted value .subscribe({ - next: (result) => { - // Logic to check if the settings were successfully updated - // This depends on how `setSettingsForUser` is implemented and what it returns - if (result.success) { - window.location.reload(); // Triggers the page reload - } + next: (response) => { + // Settings saved successfully, now reload the page + window.location.reload(); }, error: (err) => { console.error('Error updating user settings', err); From 6a4d4be1469088922ef05bc83ea9377e4589e8c1 Mon Sep 17 00:00:00 2001 From: Don Richards Date: Thu, 4 Apr 2024 16:20:49 -0400 Subject: [PATCH 4/5] Fix testing --- .../cookies/browser-klaro.service.spec.ts | 27 ++++++++++++++----- .../shared/cookies/browser-klaro.service.ts | 9 +++---- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/app/shared/cookies/browser-klaro.service.spec.ts b/src/app/shared/cookies/browser-klaro.service.spec.ts index 953734d38c5..a060ff04399 100644 --- a/src/app/shared/cookies/browser-klaro.service.spec.ts +++ b/src/app/shared/cookies/browser-klaro.service.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick } from '@angular/core/testing'; import { TranslateService } from '@ngx-translate/core'; import { getTestScheduler } from 'jasmine-marbles'; import clone from 'lodash/clone'; @@ -278,13 +278,26 @@ describe('BrowserKlaroService', () => { spyOn(updatedUser, 'setMetadata'); spyOn(JSON, 'stringify').and.returnValue(cookieConsentString); + spyOn(window.location, 'reload').and.stub(); // Prevents actual reload ePersonService.createPatchFromCache.and.returnValue(observableOf([operation])); - }); - it('should call patch on the data service', () => { - service.setSettingsForUser(updatedUser, cookieConsent); - expect(updatedUser.setMetadata).toHaveBeenCalledWith(COOKIE_MDFIELD, undefined, cookieConsentString); - expect(ePersonService.patch).toHaveBeenCalledWith(updatedUser, [operation]); - }); + ePersonService.patch.and.returnValue(observableOf(undefined)); // Ensure this is mocked if it returns an Observable. + }); + it('should call patch on the data service and reload the page', fakeAsync(() => { + // Call your method + service.updateSettingsForUsers(user); + + // Simulate time passage for async operations + tick(); + + // Check if ePersonService.patch was called as expected + expect(ePersonService.patch).toHaveBeenCalledWith( + jasmine.any(EPerson), + jasmine.any(Array) // Adjust based on expected operations + ); + + // Now check if window.location.reload was called + expect(window.location.reload).toHaveBeenCalled(); + })); }); describe('setSettingsForUser when there are no changes', () => { diff --git a/src/app/shared/cookies/browser-klaro.service.ts b/src/app/shared/cookies/browser-klaro.service.ts index 58eca876336..4bb5e95b1b4 100644 --- a/src/app/shared/cookies/browser-klaro.service.ts +++ b/src/app/shared/cookies/browser-klaro.service.ts @@ -308,13 +308,13 @@ export class BrowserKlaroService extends KlaroService { * @param user The user to save the settings for * @param config The consent settings for the user to save */ - setSettingsForUser(user: EPerson, config: object) { + setSettingsForUser(user: EPerson, config: object): Observable { if (isNotEmpty(config)) { user.setMetadata(COOKIE_MDFIELD, undefined, JSON.stringify(config)); } else { user.removeMetadata(COOKIE_MDFIELD); } - this.ePersonService.createPatchFromCache(user) + return this.ePersonService.createPatchFromCache(user) .pipe( take(1), switchMap((operations: Operation[]) => { @@ -322,9 +322,8 @@ export class BrowserKlaroService extends KlaroService { return this.ePersonService.patch(user, operations); } return observableOf(undefined); - }, - ), - ).subscribe(); + }) + ); } /** From ccbcb69e0a13a7db1f5031e65d4ed47c79256d0e Mon Sep 17 00:00:00 2001 From: Don Richards Date: Mon, 8 Apr 2024 09:54:39 -0400 Subject: [PATCH 5/5] Trying to correct tests unsuccessfully --- src/app/shared/cookies/browser-klaro.service.spec.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/shared/cookies/browser-klaro.service.spec.ts b/src/app/shared/cookies/browser-klaro.service.spec.ts index a060ff04399..6df703d4f69 100644 --- a/src/app/shared/cookies/browser-klaro.service.spec.ts +++ b/src/app/shared/cookies/browser-klaro.service.spec.ts @@ -26,6 +26,7 @@ import { import { ANONYMOUS_STORAGE_NAME_KLARO } from './klaro-configuration'; describe('BrowserKlaroService', () => { + let originalLocation; const trackingIdProp = 'google.analytics.key'; const trackingIdTestValue = 'mock-tracking-id'; const googleAnalytics = 'google-analytics'; @@ -128,6 +129,11 @@ describe('BrowserKlaroService', () => { service.klaroConfig = mockConfig; }); + afterEach(() => { + // Restore the original location after each test + window.location = originalLocation; + }); + it('should be created', () => { expect(service).toBeTruthy(); }); @@ -294,7 +300,6 @@ describe('BrowserKlaroService', () => { jasmine.any(EPerson), jasmine.any(Array) // Adjust based on expected operations ); - // Now check if window.location.reload was called expect(window.location.reload).toHaveBeenCalled(); }));