Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / pages / composition / panel / panel-tabs / group-members-tab / group-members-tab.component.spec.ts
1 import { NO_ERRORS_SCHEMA } from '@angular/core';
2 import { async, ComponentFixture } 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 { GroupInstance } from '../../../../../../models/graph/zones/group-instance';
9 import { EventListenerService } from '../../../../../../services/event-listener-service';
10 import { GroupsService } from '../../../../../services/groups.service';
11 import { TranslateService } from '../../../../../shared/translator/translate.service';
12 import { WorkspaceService } from '../../../../workspace/workspace.service';
13 import { CompositionService } from '../../../composition.service';
14 import { GroupMembersTabComponent } from './group-members-tab.component';
15
16 describe('group members tab component', () => {
17
18     let fixture: ComponentFixture<GroupMembersTabComponent>;
19
20     // Mocks
21     let workspaceServiceMock: Partial<WorkspaceService>;
22     let eventsListenerServiceMock: Partial<EventListenerService>;
23     let groupServiceMock: Partial<GroupsService>;
24     let loaderServiceMock: Partial<SdcUiServices.LoaderService>;
25     let compositionServiceMock: Partial<CompositionService>;
26     let modalServiceMock: Partial<SdcUiServices.ModalService>;
27
28     const membersToAdd = [
29         {uniqueId: '1', name: 'inst1'},
30         {uniqueId: '2', name: 'inst2'},
31     ];
32
33     beforeEach(
34         async(() => {
35
36             eventsListenerServiceMock = {};
37
38             groupServiceMock = Mock.of<GroupsService>(
39                 {
40                     updateMembers: jest.fn().mockImplementation((compType, uid, groupUniqueId, updatedMembers) => {
41                             if (updatedMembers === undefined) {
42                                 return Observable.throwError('error');
43                             } else {
44                                 return Observable.of(updatedMembers);
45                             }
46                         }
47                     )});
48
49             compositionServiceMock = {
50                 getComponentInstances: jest.fn().mockImplementation( () => {
51                         return [{uniqueId: '1', name: 'inst1'},
52                             {uniqueId: '2', name: 'inst2'},
53                             {uniqueId: '3', name: 'inst3'},
54                             {uniqueId: '4', name: 'inst4'},
55                             {uniqueId: '5', name: 'inst5'}
56                         ];
57                     }
58                 )
59             };
60
61             workspaceServiceMock = {
62                 metadata: Mock.of<ComponentMetadata>()
63             };
64
65             const addMemberModalInstance = {
66                 innerModalContent: { instance: { existingElements: membersToAdd }},
67                 closeModal: jest.fn()
68             };
69
70             modalServiceMock = {
71                 openInfoModal: jest.fn(),
72                 openCustomModal: jest.fn().mockImplementation(() => addMemberModalInstance)
73             };
74
75             loaderServiceMock = {
76                 activate: jest.fn(),
77                 deactivate: jest.fn()
78             };
79
80             const groupInstanceMock = Mock.of<GroupInstance>();
81
82             const configure: ConfigureFn = (testBed) => {
83                 testBed.configureTestingModule({
84                     declarations: [GroupMembersTabComponent],
85                     schemas: [NO_ERRORS_SCHEMA],
86                     providers: [
87                         {provide: TranslateService, useValue: { translate: jest.fn() }},
88                         {provide: GroupsService, useValue: groupServiceMock},
89                         {provide: SdcUiServices.ModalService, useValue: modalServiceMock },
90                         {provide: EventListenerService, useValue: eventsListenerServiceMock },
91                         {provide: CompositionService, useValue: compositionServiceMock },
92                         {provide: WorkspaceService, useValue: workspaceServiceMock},
93                         {provide: SdcUiServices.LoaderService, useValue: loaderServiceMock }
94                     ],
95                 });
96             };
97
98             configureTests(configure).then((testBed) => {
99                 fixture = testBed.createComponent(GroupMembersTabComponent);
100                 fixture.componentInstance.group = groupInstanceMock;
101             });
102         })
103     );
104
105     it('test that initially all members are available for adding', () => {
106         const testedComponent = fixture.componentInstance;
107
108         // No members are currently in the group, all 5 members should be returned
109         const optionalMembersToAdd = testedComponent.getOptionalsMembersToAdd();
110         expect(optionalMembersToAdd).toHaveLength(5);
111     });
112
113     it('test list of available instances to add does not include existing members', () => {
114         const testedComponent = fixture.componentInstance;
115
116         // Mock the group instance to return the members that we are about to add
117         testedComponent.group.getMembersAsUiObject = jest.fn().mockImplementation( () => membersToAdd);
118
119         // The opened modal shall return 2 members to be added
120         testedComponent.openAddMembersModal();
121         testedComponent.addMembers(); // Shall add 2 members (1,2)
122
123         // Now the getOptionalsMembersToAdd shall return 3 which are the members that were no added yet
124         const optionalMembersToAdd = testedComponent.getOptionalsMembersToAdd();
125         expect(optionalMembersToAdd).toHaveLength(3);
126     });
127 });