Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / pages / composition / panel / panel-tabs / policy-targets-tab / policy-targets-tab.component.spec.ts
1 import { NO_ERRORS_SCHEMA } from '@angular/core';
2 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
3 import { SdcUiCommon, SdcUiComponents, SdcUiServices } from 'onap-ui-angular';
4 import { Observable } from 'rxjs/Rx';
5 import { Mock } from 'ts-mockery';
6 import { ConfigureFn, configureTests } from '../../../../../../../jest/test-config.helper';
7 import { ComponentMetadata } from '../../../../../../models/component-metadata';
8 import { EventListenerService } from '../../../../../../services/event-listener-service';
9 import { TranslateService } from '../../../../../shared/translator/translate.service';
10 import { WorkspaceService } from '../../../../workspace/workspace.service';
11 import { CompositionService } from '../../../composition.service';
12 import { PolicyTargetsTabComponent } from "app/ng2/pages/composition/panel/panel-tabs/policy-targets-tab/policy-targets-tab.component";
13 import { PoliciesService } from "app/services-ng2";
14 import { PolicyInstance, GroupInstance } from "app/models";
15 import { NgxsModule } from "@ngxs/store";
16 import { GraphState } from "app/ng2/pages/composition/common/store/graph.state";
17 import { WorkspaceState } from "app/ng2/store/states/workspace.state";
18 import { TargetUiObject } from "app/models/ui-models/ui-target-object";
19 import { TargetOrMemberType } from "app/utils";
20
21
22
23
24 describe('policy targets tab component', () => {
25
26     let fixture: ComponentFixture<PolicyTargetsTabComponent>;
27     let component: PolicyTargetsTabComponent;
28
29     let policiesServiceMock = Mock.of<PoliciesService>(
30         {
31             updateTargets: jest.fn().mockImplementation((compType, uid, policyUniqueId, updatedTargets) => {
32                     if (updatedTargets === undefined) {
33                         return Observable.throwError('error');
34                     } else {
35                         return Observable.of(updatedTargets);
36                     }
37                 }
38     )});
39
40     let compositionServiceMock = {
41         componentInstances: [{uniqueId: '1', name: 'inst1'},
42                     {uniqueId: '2', name: 'inst2'},
43                     {uniqueId: '3', name: 'inst3'},
44                     {uniqueId: '4', name: 'inst4'},
45                     {uniqueId: '5', name: 'inst5'}
46         ],
47         groupInstances : [
48             Mock.of<GroupInstance>({uniqueId: "group1", name: "group1"}),
49             Mock.of<GroupInstance>({uniqueId: "group2", name: "group2"}),
50             Mock.of<GroupInstance>({uniqueId: "group3", name: "group3"})
51         ]
52     };
53
54     let workspaceServiceMock = {
55         metadata: Mock.of<ComponentMetadata>()
56     };
57
58     let modalServiceMock = {
59         openInfoModal: jest.fn(),
60         openCustomModal: jest.fn().mockImplementation(() => { return  {
61             innerModalContent: { instance: { existingElements: targetsToAdd }},
62             closeModal: jest.fn()
63         }})
64     };
65
66     let loaderServiceMock = {
67         activate: jest.fn(),
68         deactivate: jest.fn()
69     };
70
71     const targetsToAdd = [
72         <TargetUiObject>{uniqueId: '1', name: 'inst1', type: TargetOrMemberType.COMPONENT_INSTANCES},
73         <TargetUiObject>{uniqueId: "group1", name: "group1", type: TargetOrMemberType.GROUPS}
74     ];
75
76     const policyInstanceMock = Mock.of<PolicyInstance>(
77         { getTargetsAsUiObject: jest.fn().mockImplementation( () => targetsToAdd)
78     });
79
80     beforeEach(() => {
81         TestBed.configureTestingModule({
82                 declarations: [PolicyTargetsTabComponent],
83                 imports: [NgxsModule.forRoot([WorkspaceState])],
84                 schemas: [NO_ERRORS_SCHEMA],
85                 providers: [
86                     {provide: TranslateService, useValue: { translate: jest.fn() }},
87                     {provide: PoliciesService, useValue: policiesServiceMock},
88                     {provide: SdcUiServices.ModalService, useValue: modalServiceMock },
89                     {provide: EventListenerService, useValue: {} },
90                     {provide: CompositionService, useValue: compositionServiceMock },
91                     {provide: WorkspaceService, useValue: workspaceServiceMock},
92                     {provide: SdcUiServices.LoaderService, useValue: loaderServiceMock }
93                 ],
94         });
95         
96         fixture = TestBed.createComponent(PolicyTargetsTabComponent);
97         component = fixture.componentInstance;
98         component.policy = policyInstanceMock;
99     });
100     
101
102     it('if there are no existing targets, all component instances AND all groups are available for adding', () => {
103         component.targets = [];
104         const optionalTargetsToAdd = component.getOptionalsTargetsToAdd();
105         expect(optionalTargetsToAdd).toHaveLength(8);
106     });
107
108     it('list of available instances to add does not include existing targets', () => {
109         component.targets = targetsToAdd;
110         const optionalMembersToAdd = component.getOptionalsTargetsToAdd();
111         expect(optionalMembersToAdd).toHaveLength(6);
112     });
113 });