mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Added test for ResourcePolicyEditComponent
This commit is contained in:
@@ -0,0 +1,220 @@
|
|||||||
|
import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
|
||||||
|
import { ChangeDetectorRef, Component, Injector, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
|
||||||
|
import { cold, getTestScheduler } from 'jasmine-marbles';
|
||||||
|
import { of as observableOf } from 'rxjs';
|
||||||
|
import { TestScheduler } from 'rxjs/testing';
|
||||||
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
|
||||||
|
import {
|
||||||
|
createFailedRemoteDataObject,
|
||||||
|
createSuccessfulRemoteDataObject,
|
||||||
|
createTestComponent
|
||||||
|
} from '../../testing/utils';
|
||||||
|
import { LinkService } from '../../../core/cache/builders/link.service';
|
||||||
|
import { NotificationsService } from '../../notifications/notifications.service';
|
||||||
|
import { NotificationsServiceStub } from '../../testing/notifications-service-stub';
|
||||||
|
import { ResourcePolicyService } from '../../../core/resource-policy/resource-policy.service';
|
||||||
|
import { getMockResourcePolicyService } from '../../mocks/mock-resource-policy-service';
|
||||||
|
import { getMockLinkService } from '../../mocks/mock-link-service';
|
||||||
|
import { RouterStub } from '../../testing/router-stub';
|
||||||
|
import { ResourcePolicyEvent } from '../form/resource-policy-form.component';
|
||||||
|
import { GroupMock } from '../../testing/group-mock';
|
||||||
|
import { submittedResourcePolicy } from '../form/resource-policy-form.component.spec';
|
||||||
|
import { PolicyType } from '../../../core/resource-policy/models/policy-type.model';
|
||||||
|
import { ActionType } from '../../../core/resource-policy/models/action-type.model';
|
||||||
|
import { ResourcePolicyEditComponent } from './resource-policy-edit.component';
|
||||||
|
import { RESOURCE_POLICY } from '../../../core/resource-policy/models/resource-policy.resource-type';
|
||||||
|
|
||||||
|
describe('ResourcePolicyEditComponent test suite', () => {
|
||||||
|
let comp: ResourcePolicyEditComponent;
|
||||||
|
let compAsAny: any;
|
||||||
|
let fixture: ComponentFixture<ResourcePolicyEditComponent>;
|
||||||
|
let de;
|
||||||
|
let scheduler: TestScheduler;
|
||||||
|
let eventPayload: ResourcePolicyEvent;
|
||||||
|
let updatedObject;
|
||||||
|
|
||||||
|
const resourcePolicy: any = {
|
||||||
|
id: '1',
|
||||||
|
name: null,
|
||||||
|
description: null,
|
||||||
|
policyType: PolicyType.TYPE_SUBMISSION,
|
||||||
|
action: ActionType.READ,
|
||||||
|
startDate: null,
|
||||||
|
endDate: null,
|
||||||
|
type: 'resourcepolicy',
|
||||||
|
uuid: 'resource-policy-1',
|
||||||
|
_links: {
|
||||||
|
eperson: {
|
||||||
|
href: 'https://rest.api/rest/api/eperson'
|
||||||
|
},
|
||||||
|
group: {
|
||||||
|
href: 'https://rest.api/rest/api/group'
|
||||||
|
},
|
||||||
|
self: {
|
||||||
|
href: 'https://rest.api/rest/api/resourcepolicies/1'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
eperson: observableOf(createSuccessfulRemoteDataObject({})),
|
||||||
|
group: observableOf(createSuccessfulRemoteDataObject(GroupMock))
|
||||||
|
};
|
||||||
|
|
||||||
|
const resourcePolicyService: any = getMockResourcePolicyService();
|
||||||
|
const linkService: any = getMockLinkService();
|
||||||
|
const routeStub = {
|
||||||
|
data: observableOf({
|
||||||
|
resourcePolicy: createSuccessfulRemoteDataObject(resourcePolicy)
|
||||||
|
})
|
||||||
|
};
|
||||||
|
const routerStub = Object.assign(new RouterStub(), {
|
||||||
|
url: `url/edit`
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [
|
||||||
|
TranslateModule.forRoot()
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
ResourcePolicyEditComponent,
|
||||||
|
TestComponent
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
{ provide: LinkService, useValue: linkService },
|
||||||
|
{ provide: ActivatedRoute, useValue: routeStub },
|
||||||
|
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
|
||||||
|
{ provide: ResourcePolicyService, useValue: resourcePolicyService },
|
||||||
|
{ provide: Router, useValue: routerStub },
|
||||||
|
ResourcePolicyEditComponent,
|
||||||
|
ChangeDetectorRef,
|
||||||
|
Injector
|
||||||
|
],
|
||||||
|
schemas: [
|
||||||
|
NO_ERRORS_SCHEMA
|
||||||
|
]
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
let testComp: TestComponent;
|
||||||
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
|
||||||
|
// synchronous beforeEach
|
||||||
|
beforeEach(() => {
|
||||||
|
const html = `
|
||||||
|
<ds-resource-policy-edit></ds-resource-policy-edit>`;
|
||||||
|
|
||||||
|
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
|
||||||
|
testComp = testFixture.componentInstance;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
testFixture.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create ResourcePolicyEditComponent', inject([ResourcePolicyEditComponent], (app: ResourcePolicyEditComponent) => {
|
||||||
|
|
||||||
|
expect(app).toBeDefined();
|
||||||
|
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
// initTestScheduler();
|
||||||
|
fixture = TestBed.createComponent(ResourcePolicyEditComponent);
|
||||||
|
comp = fixture.componentInstance;
|
||||||
|
compAsAny = fixture.componentInstance;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
comp = null;
|
||||||
|
compAsAny = null;
|
||||||
|
de = null;
|
||||||
|
fixture.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(compAsAny.resourcePolicy).toEqual(resourcePolicy);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should redirect to authorizations page', () => {
|
||||||
|
comp.redirectToAuthorizationsPage();
|
||||||
|
expect(compAsAny.router.navigate).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true when is Processing', () => {
|
||||||
|
compAsAny.processing$.next(true);
|
||||||
|
expect(comp.isProcessing()).toBeObservable(cold('a', {
|
||||||
|
a: true
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when is not Processing', () => {
|
||||||
|
compAsAny.processing$.next(false);
|
||||||
|
expect(comp.isProcessing()).toBeObservable(cold('a', {
|
||||||
|
a: false
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
spyOn(comp, 'redirectToAuthorizationsPage').and.callThrough();
|
||||||
|
compAsAny.resourcePolicyService.update.and.returnValue(observableOf(createSuccessfulRemoteDataObject(resourcePolicy)));
|
||||||
|
|
||||||
|
compAsAny.targetResourceUUID = 'itemUUID';
|
||||||
|
|
||||||
|
eventPayload = Object.create({});
|
||||||
|
eventPayload.object = submittedResourcePolicy;
|
||||||
|
eventPayload.target = {
|
||||||
|
type: 'group',
|
||||||
|
uuid: GroupMock.id
|
||||||
|
};
|
||||||
|
|
||||||
|
compAsAny.resourcePolicy = resourcePolicy;
|
||||||
|
|
||||||
|
updatedObject = Object.assign({}, submittedResourcePolicy, {
|
||||||
|
id: resourcePolicy.id,
|
||||||
|
type: RESOURCE_POLICY.value,
|
||||||
|
_links: resourcePolicy._links
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should notify success when update is successful', () => {
|
||||||
|
compAsAny.resourcePolicyService.update.and.returnValue(observableOf(createSuccessfulRemoteDataObject(resourcePolicy)));
|
||||||
|
|
||||||
|
scheduler = getTestScheduler();
|
||||||
|
scheduler.schedule(() => comp.updateResourcePolicy(eventPayload));
|
||||||
|
scheduler.flush();
|
||||||
|
|
||||||
|
expect(compAsAny.resourcePolicyService.update).toHaveBeenCalledWith(updatedObject);
|
||||||
|
expect(comp.redirectToAuthorizationsPage).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should notify error when update is not successful', () => {
|
||||||
|
compAsAny.resourcePolicyService.update.and.returnValue(observableOf(createFailedRemoteDataObject({})));
|
||||||
|
|
||||||
|
scheduler = getTestScheduler();
|
||||||
|
scheduler.schedule(() => comp.updateResourcePolicy(eventPayload));
|
||||||
|
scheduler.flush();
|
||||||
|
|
||||||
|
expect(compAsAny.resourcePolicyService.update).toHaveBeenCalledWith(updatedObject);
|
||||||
|
expect(comp.redirectToAuthorizationsPage).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// declare a test component
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-test-cmp',
|
||||||
|
template: ``
|
||||||
|
})
|
||||||
|
class TestComponent {
|
||||||
|
|
||||||
|
}
|
@@ -9,7 +9,7 @@ import { ResourcePolicyService } from '../../../core/resource-policy/resource-po
|
|||||||
import { NotificationsService } from '../../notifications/notifications.service';
|
import { NotificationsService } from '../../notifications/notifications.service';
|
||||||
import { RemoteData } from '../../../core/data/remote-data';
|
import { RemoteData } from '../../../core/data/remote-data';
|
||||||
import { ResourcePolicy } from '../../../core/resource-policy/models/resource-policy.model';
|
import { ResourcePolicy } from '../../../core/resource-policy/models/resource-policy.model';
|
||||||
import { ResourcePolicyEvent } from '../form/resource-policy-form';
|
import { ResourcePolicyEvent } from '../form/resource-policy-form.component';
|
||||||
import { ITEM_EDIT_AUTHORIZATIONS_PATH } from '../../../+item-page/edit-item-page/edit-item-page.routing.module';
|
import { ITEM_EDIT_AUTHORIZATIONS_PATH } from '../../../+item-page/edit-item-page/edit-item-page.routing.module';
|
||||||
import { RESOURCE_POLICY } from '../../../core/resource-policy/models/resource-policy.resource-type';
|
import { RESOURCE_POLICY } from '../../../core/resource-policy/models/resource-policy.resource-type';
|
||||||
|
|
||||||
@@ -30,6 +30,15 @@ export class ResourcePolicyEditComponent implements OnInit {
|
|||||||
*/
|
*/
|
||||||
private processing$ = new BehaviorSubject<boolean>(false);
|
private processing$ = new BehaviorSubject<boolean>(false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize instance variables
|
||||||
|
*
|
||||||
|
* @param {NotificationsService} notificationsService
|
||||||
|
* @param {ResourcePolicyService} resourcePolicyService
|
||||||
|
* @param {ActivatedRoute} route
|
||||||
|
* @param {Router} router
|
||||||
|
* @param {TranslateService} translate
|
||||||
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private resourcePolicyService: ResourcePolicyService,
|
private resourcePolicyService: ResourcePolicyService,
|
||||||
@@ -38,6 +47,9 @@ export class ResourcePolicyEditComponent implements OnInit {
|
|||||||
private translate: TranslateService) {
|
private translate: TranslateService) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the component
|
||||||
|
*/
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.route.data.pipe(
|
this.route.data.pipe(
|
||||||
map((data) => data),
|
map((data) => data),
|
||||||
@@ -47,14 +59,27 @@ export class ResourcePolicyEditComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a boolean representing if an operation is pending
|
||||||
|
*
|
||||||
|
* @return {Observable<boolean>}
|
||||||
|
*/
|
||||||
isProcessing(): Observable<boolean> {
|
isProcessing(): Observable<boolean> {
|
||||||
return this.processing$.asObservable();
|
return this.processing$.asObservable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect to the authorizations page
|
||||||
|
*/
|
||||||
redirectToAuthorizationsPage() {
|
redirectToAuthorizationsPage() {
|
||||||
this.router.navigate([`../../${ITEM_EDIT_AUTHORIZATIONS_PATH}`], { relativeTo: this.route });
|
this.router.navigate([`../../${ITEM_EDIT_AUTHORIZATIONS_PATH}`], { relativeTo: this.route });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a resource policy
|
||||||
|
*
|
||||||
|
* @param event The {{ResourcePolicyEvent}} emitted
|
||||||
|
*/
|
||||||
updateResourcePolicy(event: ResourcePolicyEvent) {
|
updateResourcePolicy(event: ResourcePolicyEvent) {
|
||||||
this.processing$.next(true);
|
this.processing$.next(true);
|
||||||
const updatedObject = Object.assign({}, event.object, {
|
const updatedObject = Object.assign({}, event.object, {
|
||||||
|
Reference in New Issue
Block a user