]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/blob
19752c47d583f1320c4042bb441a5bae35a90037
[ceph-ci.git] /
1 import { ComponentFixture, TestBed } from '@angular/core/testing';
2
3 import { SmbUsersgroupsFormComponent } from './smb-usersgroups-form.component';
4 import { ToastrModule } from 'ngx-toastr';
5 import { provideHttpClient } from '@angular/common/http';
6 import { provideHttpClientTesting } from '@angular/common/http/testing';
7 import { FormGroup, ReactiveFormsModule } from '@angular/forms';
8 import { provideRouter } from '@angular/router';
9 import { SharedModule } from '~/app/shared/shared.module';
10 import { SmbService } from '~/app/shared/api/smb.service';
11 import { USERSGROUPS_RESOURCE } from '../smb.model';
12 import { of } from 'rxjs';
13
14 export const FOO_USERSGROUPS = {
15   users_groups_id: 'foo',
16   values: {
17     users: [
18       {
19         name: 'user',
20         password: 'pass'
21       }
22     ],
23     groups: [
24       {
25         name: 'bar'
26       }
27     ]
28   },
29   resource_type: USERSGROUPS_RESOURCE
30 };
31
32 describe('SmbUsersgroupsFormComponent', () => {
33   let component: SmbUsersgroupsFormComponent;
34   let fixture: ComponentFixture<SmbUsersgroupsFormComponent>;
35   let createUsersGroups: jasmine.Spy;
36   let getUsersGroups: jasmine.Spy;
37
38   beforeEach(async () => {
39     await TestBed.configureTestingModule({
40       imports: [ToastrModule.forRoot(), SharedModule, ReactiveFormsModule],
41       declarations: [SmbUsersgroupsFormComponent],
42       providers: [provideHttpClient(), provideHttpClientTesting(), provideRouter([])]
43     }).compileComponents();
44
45     fixture = TestBed.createComponent(SmbUsersgroupsFormComponent);
46     component = fixture.componentInstance;
47     component.ngOnInit();
48     createUsersGroups = spyOn(TestBed.inject(SmbService), 'createUsersGroups');
49     getUsersGroups = spyOn(TestBed.inject(SmbService), 'getUsersGroups');
50     fixture.detectChanges();
51   });
52
53   it('should create', () => {
54     expect(component).toBeTruthy();
55   });
56
57   it('should set form invalid if required username is missing', () => {
58     const user = component.users.controls[0] as FormGroup;
59     component.form.controls['usersGroupsId'].setValue('foo');
60     user.controls['name'].setValue('');
61     expect(component.form.valid).not.toBeNull();
62   });
63
64   it('should set required fields, add group and submit the form', () => {
65     const user = component.users.controls[0] as FormGroup;
66     component.form.controls['usersGroupsId'].setValue('foo');
67     component.form.controls['linkedToCluster'].setValue(undefined);
68     user.controls['name'].setValue('user');
69     user.controls['password'].setValue('pass');
70     component.addGroup();
71     const group = component.groups.controls[0] as FormGroup;
72     group.controls['name'].setValue('bar');
73
74     component.submit();
75
76     expect(createUsersGroups).toHaveBeenCalledWith(FOO_USERSGROUPS);
77   });
78
79   describe('when editing', () => {
80     beforeEach(() => {
81       component.editing = true;
82       getUsersGroups.and.returnValue(of(FOO_USERSGROUPS));
83       component.ngOnInit();
84       fixture.detectChanges();
85     });
86
87     it('should get resource data and set form fields with it', () => {
88       expect(getUsersGroups).toHaveBeenCalled();
89       expect(component.form.value).toEqual({
90         usersGroupsId: 'foo',
91         users: [
92           {
93             name: 'user',
94             password: 'pass'
95           }
96         ],
97         groups: [
98           {
99             name: 'bar'
100           }
101         ],
102         linkedToCluster: undefined
103       });
104     });
105   });
106
107   it('should add and remove users and groups', () => {
108     const nUsers = component.users.length;
109     const nGroups = component.groups.length;
110     component.addUser();
111     component.addGroup();
112     component.addGroup();
113     expect(component.users.length).toBe(nUsers + 1);
114     expect(component.groups.length).toBe(nGroups + 2);
115     component.removeUser(0);
116     component.removeGroup(0);
117     expect(component.users.length).toBe(nUsers);
118     expect(component.groups.length).toBe(nGroups + 1);
119   });
120 });