} from '@angular/common/http/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ReactiveFormsModule } from '@angular/forms';
+import { By } from '@angular/platform-browser';
import { RouterTestingModule } from '@angular/router/testing';
import { ToastModule } from 'ng2-toastr';
import { BsModalRef } from 'ngx-bootstrap/modal';
import { configureTestBed, i18nProviders } from '../../../../testing/unit-test-helper';
+import { Permission } from '../../../shared/models/permissions';
import { SharedModule } from '../../../shared/shared.module';
import { IscsiTargetDiscoveryModalComponent } from './iscsi-target-discovery-modal.component';
let httpTesting: HttpTestingController;
let req: TestRequest;
+ const elem = (css) => fixture.debugElement.query(By.css(css));
+ const elemDisabled = (css) => elem(css).nativeElement.disabled;
+
configureTestBed({
declarations: [IscsiTargetDiscoveryModalComponent],
imports: [
fixture = TestBed.createComponent(IscsiTargetDiscoveryModalComponent);
component = fixture.componentInstance;
httpTesting = TestBed.get(HttpTestingController);
- fixture.detectChanges();
- req = httpTesting.expectOne('api/iscsi/discoveryauth');
});
- it('should create', () => {
- expect(component).toBeTruthy();
- });
+ describe('with update permissions', () => {
+ beforeEach(() => {
+ component.permission = new Permission(['update']);
+ fixture.detectChanges();
+ req = httpTesting.expectOne('api/iscsi/discoveryauth');
+ });
- it('should create form', () => {
- expect(component.discoveryForm.value).toEqual({
- user: '',
- password: '',
- mutual_user: '',
- mutual_password: ''
+ it('should create', () => {
+ expect(component).toBeTruthy();
});
- });
- it('should patch form', () => {
- req.flush({
- user: 'foo',
- password: 'bar',
- mutual_user: 'mutual_foo',
- mutual_password: 'mutual_bar'
+ it('should create form', () => {
+ expect(component.discoveryForm.value).toEqual({
+ user: '',
+ password: '',
+ mutual_user: '',
+ mutual_password: ''
+ });
});
- expect(component.discoveryForm.value).toEqual({
- user: 'foo',
- password: 'bar',
- mutual_user: 'mutual_foo',
- mutual_password: 'mutual_bar'
+
+ it('should patch form', () => {
+ req.flush({
+ user: 'foo',
+ password: 'bar',
+ mutual_user: 'mutual_foo',
+ mutual_password: 'mutual_bar'
+ });
+ expect(component.discoveryForm.value).toEqual({
+ user: 'foo',
+ password: 'bar',
+ mutual_user: 'mutual_foo',
+ mutual_password: 'mutual_bar'
+ });
});
- });
- it('should submit new values', () => {
- component.discoveryForm.patchValue({
- user: 'new_user',
- password: 'new_pass',
- mutual_user: 'mutual_new_user',
- mutual_password: 'mutual_new_pass'
+ it('should submit new values', () => {
+ component.discoveryForm.patchValue({
+ user: 'new_user',
+ password: 'new_pass',
+ mutual_user: 'mutual_new_user',
+ mutual_password: 'mutual_new_pass'
+ });
+ component.submitAction();
+
+ const submit_req = httpTesting.expectOne('api/iscsi/discoveryauth');
+ expect(submit_req.request.method).toBe('PUT');
+ expect(submit_req.request.body).toEqual({
+ user: 'new_user',
+ password: 'new_pass',
+ mutual_user: 'mutual_new_user',
+ mutual_password: 'mutual_new_pass'
+ });
});
- component.submitAction();
- const submit_req = httpTesting.expectOne('api/iscsi/discoveryauth');
- expect(submit_req.request.method).toBe('PUT');
- expect(submit_req.request.body).toEqual({
- user: 'new_user',
- password: 'new_pass',
- mutual_user: 'mutual_new_user',
- mutual_password: 'mutual_new_pass'
+ it('should enable form if user has update permission', () => {
+ expect(elemDisabled('input#user')).toBeFalsy();
+ expect(elemDisabled('input#password')).toBeFalsy();
+ expect(elemDisabled('input#mutual_user')).toBeFalsy();
+ expect(elemDisabled('input#mutual_password')).toBeFalsy();
+ expect(elem('cd-submit-button')).toBeDefined();
});
});
+
+ it('should disabled form if user does not have update permission', () => {
+ component.permission = new Permission(['read', 'create', 'delete']);
+ fixture.detectChanges();
+ req = httpTesting.expectOne('api/iscsi/discoveryauth');
+
+ expect(elemDisabled('input#user')).toBeTruthy();
+ expect(elemDisabled('input#password')).toBeTruthy();
+ expect(elemDisabled('input#mutual_user')).toBeTruthy();
+ expect(elemDisabled('input#mutual_password')).toBeTruthy();
+ expect(elem('cd-submit-button')).toBeNull();
+ });
});
import { NotificationType } from '../../../shared/enum/notification-type.enum';
import { CdFormGroup } from '../../../shared/forms/cd-form-group';
import { CdValidators } from '../../../shared/forms/cd-validators';
+import { Permission } from '../../../shared/models/permissions';
+import { AuthStorageService } from '../../../shared/services/auth-storage.service';
import { NotificationService } from '../../../shared/services/notification.service';
@Component({
})
export class IscsiTargetDiscoveryModalComponent implements OnInit {
discoveryForm: CdFormGroup;
+ permission: Permission;
+ hasPermission: boolean;
USER_REGEX = /[\w\.:@_-]{8,64}/;
PASSWORD_REGEX = /[\w@\-_\/]{12,16}/;
constructor(
+ private authStorageService: AuthStorageService,
public bsModalRef: BsModalRef,
private iscsiService: IscsiService,
private notificationService: NotificationService,
private i18n: I18n
) {
+ this.permission = this.authStorageService.getPermissions().iscsi;
+ }
+
+ ngOnInit() {
+ this.hasPermission = this.permission.update;
+ this.createForm();
+ this.iscsiService.getDiscovery().subscribe((auth) => {
+ this.discoveryForm.patchValue(auth);
+ });
+ }
+
+ createForm() {
this.discoveryForm = new CdFormGroup({
- user: new FormControl(''),
- password: new FormControl(''),
- mutual_user: new FormControl(''),
- mutual_password: new FormControl('')
+ user: new FormControl({ value: '', disabled: !this.hasPermission }),
+ password: new FormControl({ value: '', disabled: !this.hasPermission }),
+ mutual_user: new FormControl({ value: '', disabled: !this.hasPermission }),
+ mutual_password: new FormControl({ value: '', disabled: !this.hasPermission })
});
CdValidators.validateIf(
);
}
- ngOnInit() {
- this.iscsiService.getDiscovery().subscribe((auth) => {
- this.discoveryForm.patchValue(auth);
- });
- }
-
submitAction() {
this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(
() => {
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.html</context>
- <context context-type="linenumber">135</context>
+ <context context-type="linenumber">136</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ceph/block/rbd-trash-purge-modal/rbd-trash-purge-modal.component.html</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.html</context>
- <context context-type="linenumber">133</context>
+ <context context-type="linenumber">134</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.html</context>
<context context-type="sourcefile">app/ceph/block/iscsi-target-list/iscsi-target-list.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
- </trans-unit><trans-unit id="8f4c079a38df7c3b64a4dfe8daa4d02aeffefbfa" datatype="html">
- <source>Set discovery authentication</source>
+ </trans-unit><trans-unit id="8414a5cb9d71cc1b21b10e4a9d1f2dad558f3361" datatype="html">
+ <source>Discovery authentication</source>
<context-group purpose="location">
<context context-type="sourcefile">app/ceph/block/iscsi-target-list/iscsi-target-list.component.html</context>
<context context-type="linenumber">39</context>