import { ActionLabelsI18n } from '../../../shared/constants/app.constants';
import { CdFormBuilder } from '../../../shared/forms/cd-form-builder';
import { CdFormGroup } from '../../../shared/forms/cd-form-group';
+import { RgwUserCapabilities } from '../models/rgw-user-capabilities';
import { RgwUserCapability } from '../models/rgw-user-capability';
@Component({
usedTypes.push(capability.type);
});
this.types = [];
- ['users', 'buckets', 'metadata', 'usage', 'zone'].forEach((type) => {
+ RgwUserCapabilities.getAll().forEach((type) => {
if (_.indexOf(usedTypes, type) === -1) {
this.types.push(type);
}
<span class="form-control no-border">
<button type="button"
class="btn btn-sm btn-default btn-label pull-right tc_addCapButton"
+ [disabled]="hasAllCapabilities()"
+ i18n-tooltip
+ tooltip="All capabilities are already added."
+ [isDisabled]="!hasAllCapabilities()"
+ triggers="pointerenter pointerleave"
(click)="showCapabilityModal()">
<i class="fa fa-fw fa-plus"></i>
<ng-container i18n>{{ actionLabels.ADD | titlecase }} {{ capabilityLabel | upperFirst }}</ng-container>
import { RouterTestingModule } from '@angular/router/testing';
import { BsModalService } from 'ngx-bootstrap/modal';
+import { TooltipModule } from 'ngx-bootstrap/tooltip';
import { ToastrModule } from 'ngx-toastr';
import { of as observableOf } from 'rxjs';
import { NotificationType } from '../../../shared/enum/notification-type.enum';
import { NotificationService } from '../../../shared/services/notification.service';
import { SharedModule } from '../../../shared/shared.module';
+import { RgwUserCapabilities } from '../models/rgw-user-capabilities';
+import { RgwUserCapability } from '../models/rgw-user-capability';
import { RgwUserS3Key } from '../models/rgw-user-s3-key';
import { RgwUserFormComponent } from './rgw-user-form.component';
ReactiveFormsModule,
RouterTestingModule,
SharedModule,
- ToastrModule.forRoot()
+ ToastrModule.forRoot(),
+ TooltipModule.forRoot()
],
providers: [BsModalService, i18nProviders]
});
);
});
});
+
+ describe('RgwUserCapabilities', () => {
+ it('capability button disabled when all capabilities are added', () => {
+ component.editing = true;
+ for (const capabilityType of RgwUserCapabilities.getAll()) {
+ const capability = new RgwUserCapability();
+ capability.type = capabilityType;
+ capability.perm = 'read';
+ component.setCapability(capability);
+ }
+
+ fixture.detectChanges();
+
+ expect(component.hasAllCapabilities()).toBeTruthy();
+ const capabilityButton = fixture.debugElement.nativeElement.querySelector('.tc_addCapButton');
+ expect(capabilityButton.disabled).toBeTruthy();
+ });
+
+ it('capability button not disabled when not all capabilities are added', () => {
+ component.editing = true;
+
+ fixture.detectChanges();
+
+ const capabilityButton = fixture.debugElement.nativeElement.querySelector('.tc_addCapButton');
+ expect(capabilityButton.disabled).toBeFalsy();
+ });
+ });
});
import { CdValidators, isEmptyInputValue } from '../../../shared/forms/cd-validators';
import { FormatterService } from '../../../shared/services/formatter.service';
import { NotificationService } from '../../../shared/services/notification.service';
+import { RgwUserCapabilities } from '../models/rgw-user-capabilities';
import { RgwUserCapability } from '../models/rgw-user-capability';
import { RgwUserS3Key } from '../models/rgw-user-s3-key';
import { RgwUserSubuser } from '../models/rgw-user-subuser';
this.userForm.markAsDirty();
}
+ hasAllCapabilities() {
+ return !_.difference(RgwUserCapabilities.getAll(), _.map(this.capabilities, 'type')).length;
+ }
+
/**
* Add/Update a S3 key.
*/