summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts')
-rw-r--r--src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts
new file mode 100644
index 000000000..21ef3a4f8
--- /dev/null
+++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts
@@ -0,0 +1,138 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CheckedTableFormComponent } from './checked-table-form.component';
+import { TableComponent } from '../table/table.component';
+import { TableKeyValueComponent } from '../table-key-value/table-key-value.component';
+import { TablePaginationComponent } from '../table-pagination/table-pagination.component';
+import { NgxDatatableModule } from '@swimlane/ngx-datatable';
+import { FormHelper, configureTestBed } from '~/testing/unit-test-helper';
+import { CdFormGroup } from '../../forms/cd-form-group';
+import { FormControl } from '@angular/forms';
+
+describe('CheckedTableFormComponent', () => {
+ let component: CheckedTableFormComponent;
+ let fixture: ComponentFixture<CheckedTableFormComponent>;
+ let formHelper: FormHelper;
+ let form: CdFormGroup;
+
+ let fakeColumns = [
+ {
+ prop: 'scope',
+ name: $localize`All`,
+ flexGrow: 1
+ },
+ {
+ prop: 'read',
+ name: $localize`Read`,
+ flexGrow: 1
+ },
+ {
+ prop: 'write',
+ name: $localize`Write`,
+ flexGrow: 1
+ },
+ {
+ prop: 'execute',
+ name: $localize`Execute`,
+ flexGrow: 1
+ }
+ ];
+
+ configureTestBed({
+ declarations: [
+ CheckedTableFormComponent,
+ TableComponent,
+ TableKeyValueComponent,
+ TablePaginationComponent
+ ],
+ imports: [NgxDatatableModule]
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CheckedTableFormComponent);
+ component = fixture.componentInstance;
+ component.columns = fakeColumns;
+ component.data = [
+ { scope: 'owner', read: true, write: true, execute: true },
+ { scope: 'group', read: true, write: true, execute: true },
+ { scope: 'other', read: true, write: true, execute: true }
+ ];
+ component.scopes = ['owner', 'group', 'others'];
+ component.form = new CdFormGroup({
+ scopes_permissions: new FormControl({})
+ });
+ component.inputField = 'scopes_permissions';
+ component.isTableForOctalMode = true;
+ form = component.form;
+ formHelper = new FormHelper(form);
+ component.ngOnInit();
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ it('should check all perms for a scope', () => {
+ formHelper.setValue('scopes_permissions', { owner: ['read'] });
+ component.onClickCellCheckbox('group', 'scope');
+ const scopes_permissions = form.getValue('scopes_permissions');
+ expect(Object.keys(scopes_permissions)).toContain('group');
+ expect(scopes_permissions['group']).toEqual(['read', 'write', 'execute'].sort());
+ });
+
+ it('should uncheck all perms for a scope', () => {
+ formHelper.setValue('scopes_permissions', { owner: ['read', 'write', 'execute'] });
+ component.onClickCellCheckbox('owner', 'scope');
+ const scopes_permissions = form.getValue('scopes_permissions');
+ expect(Object.keys(scopes_permissions)).not.toContain('owner');
+ });
+
+ it('should uncheck all scopes and perms', () => {
+ component.scopes = ['owner', 'group'];
+ formHelper.setValue('scopes_permissions', {
+ owner: ['read', 'execute'],
+ group: ['write']
+ });
+ component.onClickHeaderCheckbox('scope', ({
+ target: { checked: false }
+ } as unknown) as Event);
+ const scopes_permissions = form.getValue('scopes_permissions');
+ expect(scopes_permissions).toEqual({});
+ });
+
+ it('should check all scopes and perms', () => {
+ component.scopes = ['owner', 'group'];
+ formHelper.setValue('scopes_permissions', {
+ owner: ['read', 'write'],
+ group: ['execute']
+ });
+ component.onClickHeaderCheckbox('scope', ({ target: { checked: true } } as unknown) as Event);
+ const scopes_permissions = form.getValue('scopes_permissions');
+ const keys = Object.keys(scopes_permissions);
+ expect(keys).toEqual(['owner', 'group']);
+ keys.forEach((key) => {
+ expect(scopes_permissions[key].sort()).toEqual(['execute', 'read', 'write']);
+ });
+ });
+
+ it('should check if column is checked', () => {
+ component.data = [
+ { scope: 'a', read: true, write: true, execute: true },
+ { scope: 'b', read: false, write: true, execute: false }
+ ];
+ expect(component.isRowChecked('a')).toBeTruthy();
+ expect(component.isRowChecked('b')).toBeFalsy();
+ expect(component.isRowChecked('c')).toBeFalsy();
+ });
+
+ it('should check if header is checked', () => {
+ component.data = [
+ { scope: 'a', read: true, write: true, execute: true },
+ { scope: 'b', read: false, write: true, execute: false }
+ ];
+ expect(component.isHeaderChecked('read')).toBeFalsy();
+ expect(component.isHeaderChecked('write')).toBeTruthy();
+ expect(component.isHeaderChecked('execute')).toBeFalsy();
+ });
+});