/*
* 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 { EuiButton, EuiFieldText } from '@elastic/eui';
import { shallow } from 'enzyme';
import React from 'react';
import { updateRole } from '../../../utils/role-detail-utils';
import { setCrossPageToast } from '../../../utils/storage-utils';
import { fetchTenantNameList } from '../../../utils/tenant-utils';
import { ClusterPermissionPanel } from '../cluster-permission-panel';
import { IndexPermissionPanel } from '../index-permission-panel';
import { getSuccessToastMessage, RoleEdit } from '../role-edit';
import { TenantPanel } from '../tenant-panel';
jest.mock('../../../utils/role-detail-utils', () => ({
getRoleDetail: jest.fn().mockReturnValue({
cluster_permissions: [],
index_permissions: [],
tenant_permissions: [],
reserved: false,
}),
updateRole: jest.fn(),
}));
jest.mock('../../../utils/action-groups-utils', () => ({
fetchActionGroups: jest.fn().mockReturnValue({}),
}));
jest.mock('../../../utils/tenant-utils');
jest.mock('../../../utils/storage-utils');
describe('Role edit', () => {
const sampleSourceRole = 'role';
const mockCoreStart = {
http: 1,
};
const useEffect = jest.spyOn(React, 'useEffect');
const useState = jest.spyOn(React, 'useState');
// useEffect.mockImplementationOnce((f) => f());
it('basic rendering', () => {
const action = 'create';
const buildBreadcrumbs = jest.fn();
const component = shallow(
);
expect(buildBreadcrumbs).toBeCalledTimes(1);
expect(component.find(ClusterPermissionPanel).length).toBe(1);
expect(component.find(IndexPermissionPanel).length).toBe(1);
expect(component.find(TenantPanel).length).toBe(1);
});
it('pull role data for editing', () => {
useEffect.mockImplementationOnce((f) => f());
useEffect.mockImplementationOnce((f) => f());
useEffect.mockImplementationOnce((f) => f());
useState.mockImplementation((initialValue) => [initialValue, jest.fn()]);
const action = 'edit';
const buildBreadcrumbs = jest.fn();
const component = shallow(
);
expect(fetchTenantNameList).toBeCalledTimes(1);
});
it('submit update', (done) => {
useEffect.mockImplementationOnce((f) => f());
useEffect.mockImplementationOnce((f) => f());
useEffect.mockImplementationOnce((f) => f());
useState.mockImplementation((initialValue) => [initialValue, jest.fn()]);
const action = 'edit';
const buildBreadcrumbs = jest.fn();
const component = shallow(
);
// click update
component.find(EuiButton).last().simulate('click');
expect(updateRole).toBeCalledWith(mockCoreStart.http, '', {
cluster_permissions: [],
index_permissions: [],
tenant_permissions: [],
});
process.nextTick(() => {
expect(setCrossPageToast).toHaveBeenCalled();
done();
});
});
});