From 4d5910981ab239f36b174a2724aeb5ba6a846fa6 Mon Sep 17 00:00:00 2001 From: Simone Ramundi Date: Fri, 6 Sep 2024 17:10:09 +0200 Subject: [PATCH] [DURACOM-296] Enabled 'admin-div' only for Site Administrator --- ...e-community-parent-selector.component.html | 3 ++- ...ommunity-parent-selector.component.spec.ts | 24 ++++++++++++++++++- ...ate-community-parent-selector.component.ts | 16 +++++++++++-- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html index 8ae146b42c4..a8ec02239d3 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.html @@ -5,6 +5,7 @@ {{'dso-selector.create.community.sub-level' | translate}} diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.spec.ts b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.spec.ts index cfef8a6d685..04922d4deb4 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.spec.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.spec.ts @@ -7,13 +7,16 @@ import { TestBed, waitForAsync, } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; import { ActivatedRoute, Router, } from '@angular/router'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; +import { of as observableOf } from 'rxjs'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; import { Community } from '../../../../core/shared/community.model'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; @@ -38,7 +41,9 @@ describe('CreateCommunityParentSelectorComponent', () => { const communityRD = createSuccessfulRemoteDataObject(community); const modalStub = jasmine.createSpyObj('modalStub', ['close']); const createPath = '/communities/create'; - + const mockAuthorizationDataService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true), + }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), CreateCommunityParentSelectorComponent], @@ -59,6 +64,7 @@ describe('CreateCommunityParentSelectorComponent', () => { { provide: Router, useValue: router, }, + { provide: AuthorizationDataService, useValue: mockAuthorizationDataService }, ], schemas: [NO_ERRORS_SCHEMA], }) @@ -85,4 +91,20 @@ describe('CreateCommunityParentSelectorComponent', () => { expect(router.navigate).toHaveBeenCalledWith([createPath], { queryParams: { parent: community.uuid } }); }); + it('should show the div when user is an admin', (waitForAsync(() => { + component.isAdmin$ = observableOf(true); + fixture.detectChanges(); + + const divElement = fixture.debugElement.query(By.css('div[data-test="admin-div"]')); + expect(divElement).toBeTruthy(); + }))); + + it('should hide the div when user is not an admin', (waitForAsync(() => { + component.isAdmin$ = observableOf(false); + fixture.detectChanges(); + + const divElement = fixture.debugElement.query(By.css('div[data-test="admin-div"]')); + expect(divElement).toBeFalsy(); + }))); + }); diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts index 6b1e51dbf5b..d4e9b312451 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts @@ -1,3 +1,7 @@ +import { + AsyncPipe, + NgIf, +} from '@angular/common'; import { Component, OnInit, @@ -9,6 +13,7 @@ import { } from '@angular/router'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; +import { Observable } from 'rxjs'; import { environment } from '../../../../../environments/environment'; import { @@ -19,6 +24,8 @@ import { SortDirection, SortOptions, } from '../../../../core/cache/models/sort-options.model'; +import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; +import { FeatureID } from '../../../../core/data/feature-authorization/feature-id'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; import { DSpaceObjectType } from '../../../../core/shared/dspace-object-type.model'; import { hasValue } from '../../../empty.util'; @@ -40,18 +47,23 @@ import { styleUrls: ['./create-community-parent-selector.component.scss'], templateUrl: './create-community-parent-selector.component.html', standalone: true, - imports: [DSOSelectorComponent, TranslateModule], + imports: [DSOSelectorComponent, TranslateModule, NgIf, AsyncPipe], }) export class CreateCommunityParentSelectorComponent extends DSOSelectorModalWrapperComponent implements OnInit { objectType = DSpaceObjectType.COMMUNITY; selectorTypes = [DSpaceObjectType.COMMUNITY]; action = SelectorActionType.CREATE; defaultSort = new SortOptions(environment.comcolSelectionSort.sortField, environment.comcolSelectionSort.sortDirection as SortDirection); + isAdmin$: Observable; - constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute, private router: Router) { + constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute, private router: Router, protected authorizationService: AuthorizationDataService) { super(activeModal, route); } + ngOnInit() { + this.isAdmin$ = this.authorizationService.isAuthorized(FeatureID.AdministratorOf); + } + /** * Navigate to the community create page */