1 import { ComponentFixture, TestBed } from '@angular/core/testing';
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';
14 export const FOO_USERSGROUPS = {
15 users_groups_id: 'foo',
29 resource_type: USERSGROUPS_RESOURCE
32 describe('SmbUsersgroupsFormComponent', () => {
33 let component: SmbUsersgroupsFormComponent;
34 let fixture: ComponentFixture<SmbUsersgroupsFormComponent>;
35 let createUsersGroups: jasmine.Spy;
36 let getUsersGroups: jasmine.Spy;
38 beforeEach(async () => {
39 await TestBed.configureTestingModule({
40 imports: [ToastrModule.forRoot(), SharedModule, ReactiveFormsModule],
41 declarations: [SmbUsersgroupsFormComponent],
42 providers: [provideHttpClient(), provideHttpClientTesting(), provideRouter([])]
43 }).compileComponents();
45 fixture = TestBed.createComponent(SmbUsersgroupsFormComponent);
46 component = fixture.componentInstance;
48 createUsersGroups = spyOn(TestBed.inject(SmbService), 'createUsersGroups');
49 getUsersGroups = spyOn(TestBed.inject(SmbService), 'getUsersGroups');
50 fixture.detectChanges();
53 it('should create', () => {
54 expect(component).toBeTruthy();
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();
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');
71 const group = component.groups.controls[0] as FormGroup;
72 group.controls['name'].setValue('bar');
76 expect(createUsersGroups).toHaveBeenCalledWith(FOO_USERSGROUPS);
79 describe('when editing', () => {
81 component.editing = true;
82 getUsersGroups.and.returnValue(of(FOO_USERSGROUPS));
84 fixture.detectChanges();
87 it('should get resource data and set form fields with it', () => {
88 expect(getUsersGroups).toHaveBeenCalled();
89 expect(component.form.value).toEqual({
102 linkedToCluster: undefined
107 it('should add and remove users and groups', () => {
108 const nUsers = component.users.length;
109 const nGroups = component.groups.length;
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);