]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.spec.ts
import 14.2.4 nautilus point release
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / ceph / block / mirroring / pool-edit-peer-modal / pool-edit-peer-modal.component.spec.ts
CommitLineData
11fdf7f2
TL
1import { HttpClientTestingModule } from '@angular/common/http/testing';
2import { ComponentFixture, TestBed } from '@angular/core/testing';
3import { ReactiveFormsModule } from '@angular/forms';
4import { RouterTestingModule } from '@angular/router/testing';
5
11fdf7f2 6import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';
494da23a 7import { ToastrModule } from 'ngx-toastr';
11fdf7f2
TL
8import { of } from 'rxjs';
9
10import {
11 configureTestBed,
12 FormHelper,
13 i18nProviders
14} from '../../../../../testing/unit-test-helper';
15import { RbdMirroringService } from '../../../../shared/api/rbd-mirroring.service';
16import { NotificationService } from '../../../../shared/services/notification.service';
17import { SharedModule } from '../../../../shared/shared.module';
18import { PoolEditPeerModalComponent } from './pool-edit-peer-modal.component';
19import { PoolEditPeerResponseModel } from './pool-edit-peer-response.model';
20
21describe('PoolEditPeerModalComponent', () => {
22 let component: PoolEditPeerModalComponent;
23 let fixture: ComponentFixture<PoolEditPeerModalComponent>;
24 let notificationService: NotificationService;
25 let rbdMirroringService: RbdMirroringService;
26 let formHelper: FormHelper;
27
28 configureTestBed({
29 declarations: [PoolEditPeerModalComponent],
30 imports: [
31 HttpClientTestingModule,
32 ReactiveFormsModule,
33 RouterTestingModule,
34 SharedModule,
494da23a 35 ToastrModule.forRoot()
11fdf7f2
TL
36 ],
37 providers: [BsModalRef, BsModalService, i18nProviders]
38 });
39
40 beforeEach(() => {
41 fixture = TestBed.createComponent(PoolEditPeerModalComponent);
42 component = fixture.componentInstance;
43 component.mode = 'add';
44 component.poolName = 'somePool';
45
46 notificationService = TestBed.get(NotificationService);
47 spyOn(notificationService, 'show').and.stub();
48
49 rbdMirroringService = TestBed.get(RbdMirroringService);
50
51 formHelper = new FormHelper(component.editPeerForm);
52 });
53
54 it('should create', () => {
55 expect(component).toBeTruthy();
56 });
57
58 describe('add pool peer', () => {
59 beforeEach(() => {
60 component.mode = 'add';
61 component.peerUUID = undefined;
62 spyOn(rbdMirroringService, 'refresh').and.stub();
63 spyOn(component.modalRef, 'hide').and.callThrough();
64 fixture.detectChanges();
65 });
66
67 afterEach(() => {
68 expect(rbdMirroringService.refresh).toHaveBeenCalledTimes(1);
69 expect(component.modalRef.hide).toHaveBeenCalledTimes(1);
70 });
71
72 it('should call addPeer', () => {
73 spyOn(rbdMirroringService, 'addPeer').and.callFake(() => of(''));
74
75 component.editPeerForm.patchValue({
76 clusterName: 'cluster',
77 clientID: 'id',
78 monAddr: 'mon_host',
79 key: 'dGVzdA=='
80 });
81
82 component.update();
83 expect(rbdMirroringService.addPeer).toHaveBeenCalledWith('somePool', {
84 cluster_name: 'cluster',
85 client_id: 'id',
86 mon_host: 'mon_host',
87 key: 'dGVzdA=='
88 });
89 });
90 });
91
92 describe('edit pool peer', () => {
93 beforeEach(() => {
94 component.mode = 'edit';
95 component.peerUUID = 'somePeer';
96
97 const response = new PoolEditPeerResponseModel();
98 response.uuid = 'somePeer';
99 response.cluster_name = 'cluster';
100 response.client_id = 'id';
101 response.mon_host = '1.2.3.4:1234';
102 response.key = 'dGVzdA==';
103
104 spyOn(rbdMirroringService, 'getPeer').and.callFake(() => of(response));
105 spyOn(rbdMirroringService, 'refresh').and.stub();
106 spyOn(component.modalRef, 'hide').and.callThrough();
107 fixture.detectChanges();
108 });
109
110 afterEach(() => {
111 expect(rbdMirroringService.getPeer).toHaveBeenCalledWith('somePool', 'somePeer');
112 expect(rbdMirroringService.refresh).toHaveBeenCalledTimes(1);
113 expect(component.modalRef.hide).toHaveBeenCalledTimes(1);
114 });
115
116 it('should call updatePeer', () => {
117 spyOn(rbdMirroringService, 'updatePeer').and.callFake(() => of(''));
118
119 component.update();
120 expect(rbdMirroringService.updatePeer).toHaveBeenCalledWith('somePool', 'somePeer', {
121 cluster_name: 'cluster',
122 client_id: 'id',
123 mon_host: '1.2.3.4:1234',
124 key: 'dGVzdA=='
125 });
126 });
127 });
128
129 describe('form validation', () => {
130 beforeEach(() => {
131 fixture.detectChanges();
132 });
133
134 it('should validate cluster name', () => {
135 formHelper.expectErrorChange('clusterName', '', 'required');
136 formHelper.expectErrorChange('clusterName', ' ', 'invalidClusterName');
137 });
138
139 it('should validate client ID', () => {
140 formHelper.expectErrorChange('clientID', '', 'required');
141 formHelper.expectErrorChange('clientID', 'client.id', 'invalidClientID');
142 });
143
144 it('should validate monitor address', () => {
145 formHelper.expectErrorChange('monAddr', '@', 'invalidMonAddr');
146 });
147
148 it('should validate key', () => {
149 formHelper.expectErrorChange('key', '(', 'invalidKey');
150 });
151 });
152});