Add tests for transformation row header
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
|||||||
|
import { render, screen } from '@testing-library/react';
|
||||||
|
import userEvent from '@testing-library/user-event';
|
||||||
|
|
||||||
|
import { DataTransformerConfig, DataTransformerID } from '@grafana/data';
|
||||||
|
import { LabelsToFieldsMode, LabelsToFieldsOptions, MergeTransformerOptions } from '@grafana/data/internal';
|
||||||
|
|
||||||
|
import { TransformationOperationRowHeader } from './TransformationOperationRowHeader';
|
||||||
|
|
||||||
|
const mergeTransform: DataTransformerConfig<MergeTransformerOptions> = {
|
||||||
|
id: DataTransformerID.merge,
|
||||||
|
options: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
const labelsToFieldsTransform: DataTransformerConfig<LabelsToFieldsOptions> = {
|
||||||
|
id: DataTransformerID.labelsToFields,
|
||||||
|
options: {
|
||||||
|
mode: LabelsToFieldsMode.Rows,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const labelsToFieldsRefId = { ...labelsToFieldsTransform, refId: 'test' };
|
||||||
|
|
||||||
|
describe('TransformationOperationRowHeader', () => {
|
||||||
|
it('renders the modal with the title and empty refId for ', () => {
|
||||||
|
const { unmount } = render(
|
||||||
|
<TransformationOperationRowHeader
|
||||||
|
index={0}
|
||||||
|
transformation={mergeTransform}
|
||||||
|
transformations={[mergeTransform, labelsToFieldsTransform]}
|
||||||
|
transformationTypeName="1 - Labels to fields"
|
||||||
|
onChange={() => {}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check if the modal title is rendered with the correct text
|
||||||
|
expect(screen.getByText('1 - Labels to fields')).toBeInTheDocument();
|
||||||
|
expect(screen.getByText('(Auto)')).toBeInTheDocument();
|
||||||
|
|
||||||
|
// Unmount the component to clean up
|
||||||
|
unmount();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calls onChange when the the refId is changed', async () => {
|
||||||
|
const mockOnChange = jest.fn();
|
||||||
|
const { unmount } = render(
|
||||||
|
<TransformationOperationRowHeader
|
||||||
|
index={0}
|
||||||
|
transformation={mergeTransform}
|
||||||
|
transformations={[mergeTransform, labelsToFieldsTransform]}
|
||||||
|
transformationTypeName="1 - Labels to fields"
|
||||||
|
onChange={mockOnChange}
|
||||||
|
dynamicRefId=""
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Find and click the modal's close button
|
||||||
|
const beforeEditField = screen.getByTestId('transformation-refid-div');
|
||||||
|
await userEvent.click(beforeEditField);
|
||||||
|
const refIdInput = screen.getByTestId('transformation-refid-input');
|
||||||
|
await userEvent.click(refIdInput);
|
||||||
|
await userEvent.type(refIdInput, 'test refid');
|
||||||
|
|
||||||
|
// blur the field
|
||||||
|
await userEvent.click(document.body);
|
||||||
|
expect(mockOnChange).toHaveBeenCalledWith(0, { id: 'merge', options: {}, refId: 'test refid' });
|
||||||
|
|
||||||
|
unmount();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('shows an error message if the refID is already used', async () => {
|
||||||
|
const mockOnChange = jest.fn();
|
||||||
|
|
||||||
|
const { unmount } = render(
|
||||||
|
<TransformationOperationRowHeader
|
||||||
|
index={0}
|
||||||
|
transformation={mergeTransform}
|
||||||
|
transformations={[mergeTransform, labelsToFieldsRefId]}
|
||||||
|
transformationTypeName="1 - Labels to fields"
|
||||||
|
onChange={mockOnChange}
|
||||||
|
dynamicRefId=""
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Find and click the modal's close button
|
||||||
|
const beforeEditField = screen.getByTestId('transformation-refid-div');
|
||||||
|
await userEvent.click(beforeEditField);
|
||||||
|
const refIdInput = screen.getByTestId('transformation-refid-input');
|
||||||
|
await userEvent.click(refIdInput);
|
||||||
|
await userEvent.type(refIdInput, 'test');
|
||||||
|
expect(screen.getByText('Transformation name already exists')).toBeInTheDocument();
|
||||||
|
// blur the field
|
||||||
|
await userEvent.click(document.body);
|
||||||
|
expect(mockOnChange).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
unmount();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('displays the dynamic id if provided', async () => {
|
||||||
|
const { unmount } = render(
|
||||||
|
<TransformationOperationRowHeader
|
||||||
|
index={0}
|
||||||
|
transformation={mergeTransform}
|
||||||
|
transformations={[mergeTransform, labelsToFieldsTransform]}
|
||||||
|
transformationTypeName="1 - Labels to fields"
|
||||||
|
onChange={() => {}}
|
||||||
|
dynamicRefId="test-A-B"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(screen.getByText('test-A-B')).toBeInTheDocument();
|
||||||
|
unmount();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('displays the static id if provided, even if dynamic ref id is also provided', async () => {
|
||||||
|
const { unmount } = render(
|
||||||
|
<TransformationOperationRowHeader
|
||||||
|
index={0}
|
||||||
|
transformation={labelsToFieldsRefId}
|
||||||
|
transformations={[labelsToFieldsRefId, mergeTransform]}
|
||||||
|
transformationTypeName="1 - Labels to fields"
|
||||||
|
onChange={() => {}}
|
||||||
|
dynamicRefId="refId"
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(screen.getByText('test')).toBeInTheDocument();
|
||||||
|
unmount();
|
||||||
|
});
|
||||||
|
});
|
||||||
+3
-3
@@ -93,7 +93,7 @@ export const TransformationOperationRowHeader = (props: Props) => {
|
|||||||
'Edit transformation name'
|
'Edit transformation name'
|
||||||
)}
|
)}
|
||||||
onClick={() => toggleIsRefIdEditing()}
|
onClick={() => toggleIsRefIdEditing()}
|
||||||
data-testid="query-name-div"
|
data-testid="transformation-refid-div"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<span className={cx(styles.refIdStyle, !isStaticRefId && styles.placeholderText)}>
|
<span className={cx(styles.refIdStyle, !isStaticRefId && styles.placeholderText)}>
|
||||||
@@ -160,7 +160,7 @@ const getStyles = (theme: GrafanaTheme2) => {
|
|||||||
},
|
},
|
||||||
|
|
||||||
'&:hover, &:focus': {
|
'&:hover, &:focus': {
|
||||||
'.query-name-edit-icon': {
|
'.transformation-refid-edit-icon': {
|
||||||
visibility: 'visible',
|
visibility: 'visible',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -176,7 +176,7 @@ const getStyles = (theme: GrafanaTheme2) => {
|
|||||||
marginLeft: theme.spacing(1),
|
marginLeft: theme.spacing(1),
|
||||||
visibility: 'hidden',
|
visibility: 'hidden',
|
||||||
}),
|
}),
|
||||||
'query-name-edit-icon'
|
'transformation-refid-edit-icon'
|
||||||
),
|
),
|
||||||
refIdInput: css({
|
refIdInput: css({
|
||||||
maxWidth: '300px',
|
maxWidth: '300px',
|
||||||
|
|||||||
Reference in New Issue
Block a user