Skip to content

Commit 21d7fd2

Browse files
Francesco MautoFrancescoMolinaro
authored andcommitted
Merged in task/dspace-cris-2025_02_x/DSC-2944 (pull request DSpace#4828)
Task/dspace cris 2025 02 x/DSC-2944 Approved-by: Francesco Molinaro
2 parents 98add71 + bdb2c2b commit 21d7fd2

4 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/app/info/end-user-agreement/end-user-agreement.component.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
import { AuthService } from '../../core/auth/auth.service';
2424
import { AuthTokenInfo } from '../../core/auth/models/auth-token-info.model';
2525
import { EndUserAgreementService } from '../../core/end-user-agreement/end-user-agreement.service';
26+
import { EPersonDataService } from '../../core/eperson/eperson-data.service';
2627
import { BtnDisabledDirective } from '../../shared/btn-disabled.directive';
2728
import { NotificationsService } from '../../shared/notifications/notifications.service';
2829
import { ActivatedRouteStub } from '../../shared/testing/active-router.stub';
@@ -36,6 +37,7 @@ describe('EndUserAgreementComponent', () => {
3637
let endUserAgreementService: EndUserAgreementService;
3738
let notificationsService: NotificationsService;
3839
let authService: AuthService;
40+
let ePersonService: EPersonDataService;
3941
let store;
4042
let router: Router;
4143
let route: ActivatedRoute;
@@ -56,6 +58,10 @@ describe('EndUserAgreementComponent', () => {
5658
authService = jasmine.createSpyObj('authService', {
5759
isAuthenticated: of(true),
5860
getToken: token,
61+
getAuthenticatedUserIdFromStore: of('user-id'),
62+
});
63+
ePersonService = jasmine.createSpyObj('ePersonService', {
64+
invalidateById: of(true),
5965
});
6066
store = jasmine.createSpyObj('store', ['dispatch']);
6167
router = jasmine.createSpyObj('router', ['navigate', 'navigateByUrl']);
@@ -74,6 +80,7 @@ describe('EndUserAgreementComponent', () => {
7480
{ provide: EndUserAgreementService, useValue: endUserAgreementService },
7581
{ provide: NotificationsService, useValue: notificationsService },
7682
{ provide: AuthService, useValue: authService },
83+
{ provide: EPersonDataService, useValue: ePersonService },
7784
{ provide: Store, useValue: store },
7885
{ provide: Router, useValue: router },
7986
{ provide: ActivatedRoute, useValue: route },

src/app/info/end-user-agreement/end-user-agreement.component.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
} from '../../core/auth/auth.actions';
3535
import { AuthService } from '../../core/auth/auth.service';
3636
import { EndUserAgreementService } from '../../core/end-user-agreement/end-user-agreement.service';
37+
import { EPersonDataService } from '../../core/eperson/eperson-data.service';
3738
import { BtnDisabledDirective } from '../../shared/btn-disabled.directive';
3839
import { isNotEmpty } from '../../shared/empty.util';
3940
import { NotificationsService } from '../../shared/notifications/notifications.service';
@@ -71,6 +72,7 @@ export class EndUserAgreementComponent implements OnInit, OnDestroy {
7172
protected notificationsService: NotificationsService,
7273
protected translate: TranslateService,
7374
protected authService: AuthService,
75+
protected ePersonService: EPersonDataService,
7476
protected store: Store<AppState>,
7577
protected router: Router,
7678
protected route: ActivatedRoute,
@@ -120,7 +122,12 @@ export class EndUserAgreementComponent implements OnInit, OnDestroy {
120122
switchMap((success) => {
121123
if (success) {
122124
this.notificationsService.success(this.translate.instant('info.end-user-agreement.accept.success'));
123-
return this.route.queryParams.pipe(map((params) => params.redirect));
125+
return this.authService.getAuthenticatedUserIdFromStore().pipe(
126+
switchMap((userId) => {
127+
this.ePersonService.invalidateById(userId);
128+
return this.route.queryParams.pipe(map((params) => params.redirect));
129+
}),
130+
);
124131
} else {
125132
this.notificationsService.error(this.translate.instant('info.end-user-agreement.accept.error'));
126133
return of(undefined);

src/app/shared/menu/providers/explore.menu.spec.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import { TestBed } from '@angular/core/testing';
1111
import { APP_CONFIG } from '../../../../config/app-config.interface';
1212
import { environment } from '../../../../environments/environment';
1313
import { SectionDataService } from '../../../core/layout/section-data.service';
14-
import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils';
14+
import {
15+
createFailedRemoteDataObject$,
16+
createSuccessfulRemoteDataObject$,
17+
} from '../../remote-data.utils';
1518
import { createPaginatedList } from '../../testing/utils.test';
1619
import { ExploreMenuProvider } from './explore.menu';
1720

@@ -36,4 +39,12 @@ describe('ExploreMenuProvider', () => {
3639
it('should be created', () => {
3740
expect(provider).toBeTruthy();
3841
});
42+
43+
it('should return empty sections when the API returns an error', (done) => {
44+
sectionDataServiceStub.findVisibleSections = () => createFailedRemoteDataObject$('Forbidden', 403);
45+
provider.getSections().subscribe((sections) => {
46+
expect(sections).toEqual([]);
47+
done();
48+
});
49+
});
3950
});

src/app/shared/menu/providers/explore.menu.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { PaginatedList } from '../../../core/data/paginated-list.model';
1414
import { RemoteData } from '../../../core/data/remote-data';
1515
import { Section } from '../../../core/layout/models/section.model';
1616
import { SectionDataService } from '../../../core/layout/section-data.service';
17-
import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
17+
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
1818
import { MenuItemType } from '../menu-item-type.model';
1919
import {
2020
AbstractMenuProvider,
@@ -37,8 +37,11 @@ export class ExploreMenuProvider extends AbstractMenuProvider {
3737
*/
3838
getSections(): Observable<PartialMenuSection[]> {
3939
return this.sectionDataService.findVisibleSections().pipe(
40-
getFirstSucceededRemoteData(),
40+
getFirstCompletedRemoteData(),
4141
map((rd: RemoteData<PaginatedList<Section>>) => {
42+
if (!rd.hasSucceeded) {
43+
return [];
44+
}
4245
return [
4346
...rd.payload.page.map((browseDef) => {
4447
return {

0 commit comments

Comments
 (0)