Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / pages / composition / panel / panel-header / panel-header.component.spec.ts
1 import { NO_ERRORS_SCHEMA } from '@angular/core';
2 import { ComponentFixture, TestBed, async } from '@angular/core/testing';
3 import { CompositionService } from 'app/ng2/pages/composition/composition.service';
4 import { EventListenerService } from '../../../../../services/event-listener-service';
5 import { ComponentInstanceServiceNg2 } from 'app/ng2/services/component-instance-services/component-instance.service';
6 import { WorkspaceService } from 'app/ng2/pages/workspace/workspace.service';
7 import { GroupsService } from 'app/services-ng2';
8 import { PoliciesService } from 'app/services-ng2';
9 import { CompositionPanelHeaderComponent } from './panel-header.component';
10 import {SdcUiServices} from 'onap-ui-angular';
11 import { Capability, Requirement, RequirementsGroup, CapabilitiesGroup, ComponentInstance, Component, FullComponentInstance, PolicyInstance, GroupInstance } from "app/models";
12 import { of, Observable } from "rxjs";
13
14 describe('CompositionPanelHeaderComponent', () => {
15   let component: CompositionPanelHeaderComponent;
16   let fixture: ComponentFixture<CompositionPanelHeaderComponent>;
17   const componentInstanceServiceNg2Stub = {
18     updateComponentInstance: jest.fn()
19   };
20   const valueEditModalInstance = {
21     innerModalContent : {
22       instance: { name : "VF Test" }
23     },
24     buttons: [{id: 'saveButton', text: 'OK', size: 'xsm', callback: jest.fn(), closeModal: false}],
25     closeModal : jest.fn()
26   };
27
28   beforeEach(
29     () => {
30       const compositionServiceStub = {};
31       const eventListenerServiceStub = {};
32
33       const workspaceServiceStub = {
34         metadata: {
35           componentType: "SERVICE",
36           uniqueId: "123"
37         }
38       };
39       const groupsServiceStub = {
40         updateName: jest.fn()
41       };
42       const policiesServiceStub = {
43         updateName: jest.fn()
44       };
45
46       TestBed.configureTestingModule({
47         schemas: [NO_ERRORS_SCHEMA],
48         declarations: [CompositionPanelHeaderComponent],
49         providers: [
50           { provide: CompositionService, useValue: compositionServiceStub },
51           { provide: EventListenerService, useValue: eventListenerServiceStub },
52           {
53             provide: ComponentInstanceServiceNg2,
54             useValue: componentInstanceServiceNg2Stub
55           },
56           { provide: WorkspaceService, useValue: workspaceServiceStub },
57           { provide: GroupsService, useValue: groupsServiceStub },
58           { provide: PoliciesService, useValue: policiesServiceStub },
59           { provide: SdcUiServices.ModalService, useValue: {}}
60         ]
61       });
62       fixture = TestBed.createComponent(CompositionPanelHeaderComponent);
63       component = fixture.componentInstance;
64     }
65   );
66
67   it('can load instance', () => {
68     expect(component).toBeTruthy();
69   });
70
71   it('should close the modal without saving if the name has not changed', () => {
72     component.selectedComponent = <FullComponentInstance>{name: "VF Test"};
73     component.valueEditModalInstance = valueEditModalInstance;
74
75     component.saveInstanceName();
76     expect(component.componentInstanceService.updateComponentInstance).not.toHaveBeenCalled();
77     expect(component.valueEditModalInstance.closeModal).toHaveBeenCalled();
78   });
79
80   it('after editing instance name, capabilities/requirements should be updated with new name', () => {
81     const newName = "New VF NAME";
82     component.selectedComponent = new FullComponentInstance(<ComponentInstance>{
83       name: "VF Test",
84       requirements: <RequirementsGroup>{"key": [<Requirement>{ownerName: "VF Test"}, <Requirement>{ownerName: "VF Test"}]},
85       capabilities: new CapabilitiesGroup()
86     }, <Component>{});
87     component.selectedComponent.capabilities['key'] =  [<Capability>{ownerName: "VF Test"}];      
88     component.valueEditModalInstance = valueEditModalInstance;
89     component.valueEditModalInstance.innerModalContent.instance.name = newName;
90     jest.spyOn(component.componentInstanceService, 'updateComponentInstance').mockReturnValue(of(<ComponentInstance>{name: newName}));
91     component.saveInstanceName();
92     
93     expect(component.selectedComponent.name).toBe(newName);
94     expect(component.selectedComponent.requirements['key'][0].ownerName).toEqual(newName);
95     expect(component.selectedComponent.requirements['key'][1].ownerName).toEqual(newName);
96     expect(component.selectedComponent.capabilities['key'][0].ownerName).toEqual(newName);
97   });
98
99   it('if update fails, name is reverted to old value', () => { 
100     component.selectedComponent = new GroupInstance(<GroupInstance>{name: "GROUP NAME"});
101     component.valueEditModalInstance = valueEditModalInstance;
102     jest.spyOn(component.groupService, 'updateName').mockReturnValue(Observable.throw(new Error('Error')));
103     component.saveInstanceName();
104     expect(component.selectedComponent.name).toEqual("GROUP NAME");
105   });
106
107   it('policy instance uses policies service for update name', () => { 
108     component.selectedComponent = new PolicyInstance(<PolicyInstance>{name: "Policy OLD NAME"});
109     component.valueEditModalInstance = valueEditModalInstance;
110     jest.spyOn(component.policiesService, 'updateName').mockReturnValue(of(true));
111     component.saveInstanceName();
112     expect(component.policiesService.updateName).toHaveBeenCalledTimes(1);
113   });
114
115   it('group instance uses groups service for update name', () => { 
116     component.selectedComponent = new GroupInstance(<GroupInstance>{name: "GROUP NAME"});
117     component.valueEditModalInstance = valueEditModalInstance;
118     jest.spyOn(component.groupService, 'updateName').mockReturnValue(of(true));
119     component.saveInstanceName();
120     expect(component.groupService.updateName).toHaveBeenCalledTimes(1);
121   });
122
123 });