/*
* Copyright OpenSearch Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import { RoleTenantPermission, TenantPermissionType } from '../../../types';
import { TENANT_READ_PERMISSION, TENANT_WRITE_PERMISSION } from '../../../constants';
import { RoleTenantPermissionStateClass } from '../types';
import {
buildTenantPermissionState,
unbuildTenantPermissionState,
TenantPanel,
} from '../tenant-panel';
import { shallow } from 'enzyme';
import React from 'react';
import { EuiComboBox, EuiButton, EuiSuperSelect } from '@elastic/eui';
jest.mock('../../../utils/array-state-utils');
// eslint-disable-next-line
const arrayStateUtils = require('../../../utils/array-state-utils');
describe('Role edit - tenant panel', () => {
const tenantName1 = 'tenant1';
it('buildTenantPermissionState', () => {
const input: RoleTenantPermission[] = [
{
tenant_patterns: [tenantName1],
allowed_actions: [TENANT_READ_PERMISSION],
},
];
const result = buildTenantPermissionState(input);
const expected: RoleTenantPermissionStateClass[] = [
{
tenantPatterns: [{ label: tenantName1 }],
permissionType: TenantPermissionType.Read,
},
];
expect(result).toEqual(expected);
});
it('unbuildTenantPermissionState', () => {
const permissions: RoleTenantPermissionStateClass[] = [
{
tenantPatterns: [{ label: tenantName1 }],
permissionType: TenantPermissionType.ReadWrite,
},
];
const result = unbuildTenantPermissionState(permissions);
const expected: RoleTenantPermission[] = [
{
tenant_patterns: [tenantName1],
allowed_actions: [TENANT_WRITE_PERMISSION],
},
];
expect(result).toEqual(expected);
});
describe('TenantPanel', () => {
const tenantName2 = 'tenant2';
const optionUniverse = [{ label: tenantName1 }, { label: tenantName2 }];
const setState = jest.fn();
it('render an empty row if data is empty', () => {
shallow();
expect(setState).toHaveBeenCalledWith([
{
tenantPatterns: [],
permissionType: TenantPermissionType.ReadWrite,
},
]);
});
it('render data', () => {
const state: RoleTenantPermissionStateClass[] = [
{
tenantPatterns: [{ label: tenantName1 }],
permissionType: TenantPermissionType.ReadWrite,
},
{
tenantPatterns: [{ label: tenantName2 }],
permissionType: TenantPermissionType.Read,
},
];
const component = shallow(
);
const comboBoxArray = component.find(EuiComboBox);
expect(comboBoxArray.length).toEqual(2);
expect(comboBoxArray.at(0).prop('selectedOptions')).toBe(state[0].tenantPatterns);
expect(comboBoxArray.at(1).prop('selectedOptions')).toBe(state[1].tenantPatterns);
const superSelectArray = component.find(EuiSuperSelect);
expect(superSelectArray.at(0).prop('valueOfSelected')).toBe(state[0].permissionType);
expect(superSelectArray.at(1).prop('valueOfSelected')).toBe(state[1].permissionType);
});
it('add row', () => {
const component = shallow(
);
const addRowButton = component.find(EuiButton).last();
addRowButton.simulate('click');
expect(arrayStateUtils.appendElementToArray).toHaveBeenCalledTimes(1);
});
it('remove row', () => {
const state: RoleTenantPermissionStateClass[] = [
{
tenantPatterns: [{ label: tenantName1 }],
permissionType: TenantPermissionType.ReadWrite,
},
];
const component = shallow(
);
const removeRowButton = component.find(EuiButton).first();
removeRowButton.simulate('click');
expect(arrayStateUtils.removeElementFromArray).toHaveBeenCalledTimes(1);
});
});
});