mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-16 14:33:03 +00:00
88 lines
2.9 KiB
TypeScript
88 lines
2.9 KiB
TypeScript
import {
|
|
ActivatedRouteSnapshot,
|
|
Router,
|
|
} from '@angular/router';
|
|
import { of as observableOf } from 'rxjs';
|
|
|
|
import { AuthService } from '../../core/auth/auth.service';
|
|
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
|
|
import { FeatureID } from '../../core/data/feature-authorization/feature-id';
|
|
import { HALEndpointService } from '../../core/shared/hal-endpoint.service';
|
|
import { GroupPageGuard } from './group-page.guard';
|
|
|
|
describe('GroupPageGuard', () => {
|
|
const groupsEndpointUrl = 'https://test.org/api/eperson/groups';
|
|
const groupUuid = '0d6f89df-f95a-4829-943c-f21f434fb892';
|
|
const groupEndpointUrl = `${groupsEndpointUrl}/${groupUuid}`;
|
|
const routeSnapshotWithGroupId = {
|
|
params: {
|
|
groupId: groupUuid,
|
|
},
|
|
} as unknown as ActivatedRouteSnapshot;
|
|
|
|
let guard: GroupPageGuard;
|
|
let halEndpointService: HALEndpointService;
|
|
let authorizationService: AuthorizationDataService;
|
|
let router: Router;
|
|
let authService: AuthService;
|
|
|
|
beforeEach(() => {
|
|
halEndpointService = jasmine.createSpyObj(['getEndpoint']);
|
|
(halEndpointService as any).getEndpoint.and.returnValue(observableOf(groupsEndpointUrl));
|
|
|
|
authorizationService = jasmine.createSpyObj(['isAuthorized']);
|
|
// NOTE: value is set in beforeEach
|
|
|
|
router = jasmine.createSpyObj(['parseUrl']);
|
|
(router as any).parseUrl.and.returnValue = {};
|
|
|
|
authService = jasmine.createSpyObj(['isAuthenticated']);
|
|
(authService as any).isAuthenticated.and.returnValue(observableOf(true));
|
|
|
|
guard = new GroupPageGuard(halEndpointService, authorizationService, router, authService);
|
|
});
|
|
|
|
it('should be created', () => {
|
|
expect(guard).toBeTruthy();
|
|
});
|
|
|
|
describe('canActivate', () => {
|
|
describe('when the current user can manage the group', () => {
|
|
beforeEach(() => {
|
|
(authorizationService as any).isAuthorized.and.returnValue(observableOf(true));
|
|
});
|
|
|
|
it('should return true', (done) => {
|
|
guard.canActivate(
|
|
routeSnapshotWithGroupId, { url: 'current-url' } as any,
|
|
).subscribe((result) => {
|
|
expect(authorizationService.isAuthorized).toHaveBeenCalledWith(
|
|
FeatureID.CanManageGroup, groupEndpointUrl, undefined,
|
|
);
|
|
expect(result).toBeTrue();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when the current user can not manage the group', () => {
|
|
beforeEach(() => {
|
|
(authorizationService as any).isAuthorized.and.returnValue(observableOf(false));
|
|
});
|
|
|
|
it('should not return true', (done) => {
|
|
guard.canActivate(
|
|
routeSnapshotWithGroupId, { url: 'current-url' } as any,
|
|
).subscribe((result) => {
|
|
expect(authorizationService.isAuthorized).toHaveBeenCalledWith(
|
|
FeatureID.CanManageGroup, groupEndpointUrl, undefined,
|
|
);
|
|
expect(result).not.toBeTrue();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|