/*
* 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 { EuiFieldText, EuiFlexGroup } from '@elastic/eui';
import { shallow } from 'enzyme';
import React from 'react';
import {
appendElementToArray,
removeElementFromArray,
updateElementInArrayHandler,
} from '../../../utils/array-state-utils';
import { AttributePanel, buildAttributeState, unbuildAttributeState } from '../attribute-panel';
jest.mock('../../../utils/array-state-utils', () => ({
appendElementToArray: jest.fn(),
removeElementFromArray: jest.fn(),
updateElementInArrayHandler: jest.fn().mockReturnValue(jest.fn()),
}));
describe('User editing - attribute panel', () => {
const attr1 = 'attr1';
const value1 = 'value1';
const attr2 = 'attr2';
const value2 = 'value2';
const setState = jest.fn();
const sampleRawData = { [attr1]: value1, [attr2]: value2 };
const sampleState = [
{ key: attr1, value: value1 },
{ key: attr2, value: value2 },
];
it('buildAttributeState', () => {
const result = buildAttributeState(sampleRawData);
expect(result).toEqual(sampleState);
});
it('unbuildAttributeState', () => {
const result = unbuildAttributeState(sampleState);
expect(result).toEqual(sampleRawData);
});
describe('AttributePanel', () => {
it('render an empty row when no data', () => {
shallow();
expect(setState).toBeCalledWith([{ key: '', value: '' }]);
});
it('render data', () => {
const component = shallow();
expect(component.find(EuiFlexGroup).length).toBe(2);
expect(component.find(EuiFieldText).at(0).prop('value')).toBe(attr1);
expect(component.find(EuiFieldText).at(1).prop('value')).toBe(value1);
expect(component.find(EuiFieldText).at(2).prop('value')).toBe(attr2);
expect(component.find(EuiFieldText).at(3).prop('value')).toBe(value2);
});
it('add row', () => {
const component = shallow();
component.find('#add-row').simulate('click');
expect(appendElementToArray).toBeCalledWith(setState, [], { key: '', value: '' });
});
it('change attribute name', () => {
const component = shallow();
component.find('#attribute-0').simulate('change', { target: { value: '' } });
expect(updateElementInArrayHandler).toBeCalledWith(setState, [0, 'key']);
});
it('change attribute value', () => {
const component = shallow();
component.find('#value-0').simulate('change', { target: { value: '' } });
expect(updateElementInArrayHandler).toBeCalledWith(setState, [0, 'value']);
});
it('delete row', () => {
const component = shallow();
component.find('#delete-0').simulate('click');
expect(removeElementFromArray).toBeCalledWith(setState, [], 0);
});
});
});