The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/cloud-monitoring/components/Preprocessor.test.tsx

106 lines
4.5 KiB

import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { CustomVariableModel } from '@grafana/data';
import { createMockMetricDescriptor } from '../__mocks__/cloudMonitoringMetricDescriptor';
import { createMockTimeSeriesList } from '../__mocks__/cloudMonitoringQuery';
import { MetricKind, ValueTypes } from '../types/query';
import { Preprocessor } from './Preprocessor';
let getTempVars = () => [] as CustomVariableModel[];
let replace = () => '';
jest.mock('@grafana/runtime', () => {
return {
__esModule: true,
...jest.requireActual('@grafana/runtime'),
getTemplateSrv: () => ({
replace: replace,
getVariables: getTempVars,
updateTimeRange: jest.fn(),
containsTemplate: jest.fn(),
}),
};
});
describe('Preprocessor', () => {
it('only provides "None" as an option if no metric descriptor is provided', () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
render(<Preprocessor onChange={onChange} query={query} />);
expect(screen.getByText('Pre-processing')).toBeInTheDocument();
expect(screen.getByText('None')).toBeInTheDocument();
expect(screen.queryByText('Rate')).not.toBeInTheDocument();
expect(screen.queryByText('Delta')).not.toBeInTheDocument();
});
it('only provides "None" as an option if metric kind is "Gauge"', () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
const metricDescriptor = createMockMetricDescriptor({ metricKind: MetricKind.GAUGE });
render(<Preprocessor onChange={onChange} query={query} metricDescriptor={metricDescriptor} />);
expect(screen.getByText('Pre-processing')).toBeInTheDocument();
expect(screen.getByText('None')).toBeInTheDocument();
expect(screen.queryByText('Rate')).not.toBeInTheDocument();
expect(screen.queryByText('Delta')).not.toBeInTheDocument();
});
it('only provides "None" as an option if value type is "Distribution"', () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
const metricDescriptor = createMockMetricDescriptor({ valueType: ValueTypes.DISTRIBUTION });
render(<Preprocessor onChange={onChange} query={query} metricDescriptor={metricDescriptor} />);
expect(screen.getByText('Pre-processing')).toBeInTheDocument();
expect(screen.getByText('None')).toBeInTheDocument();
expect(screen.queryByText('Rate')).not.toBeInTheDocument();
expect(screen.queryByText('Delta')).not.toBeInTheDocument();
});
it('provides "None" and "Rate" as options if metric kind is not "Delta" or "Cumulative" and value type is not "Distribution"', () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
const metricDescriptor = createMockMetricDescriptor({ metricKind: MetricKind.DELTA });
render(<Preprocessor onChange={onChange} query={query} metricDescriptor={metricDescriptor} />);
expect(screen.getByText('Pre-processing')).toBeInTheDocument();
expect(screen.getByText('None')).toBeInTheDocument();
expect(screen.queryByText('Rate')).toBeInTheDocument();
expect(screen.queryByText('Delta')).not.toBeInTheDocument();
});
it('provides all options if metric kind is "Cumulative" and value type is not "Distribution"', () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
const metricDescriptor = createMockMetricDescriptor({ metricKind: MetricKind.CUMULATIVE });
render(<Preprocessor onChange={onChange} query={query} metricDescriptor={metricDescriptor} />);
expect(screen.getByText('Pre-processing')).toBeInTheDocument();
expect(screen.getByText('None')).toBeInTheDocument();
expect(screen.queryByText('Rate')).toBeInTheDocument();
expect(screen.queryByText('Delta')).toBeInTheDocument();
});
it('provides all options if metric kind is "Cumulative" and value type is not "Distribution"', async () => {
const query = createMockTimeSeriesList();
const onChange = jest.fn();
const metricDescriptor = createMockMetricDescriptor({ metricKind: MetricKind.CUMULATIVE });
render(<Preprocessor onChange={onChange} query={query} metricDescriptor={metricDescriptor} />);
const none = screen.getByLabelText('None');
const rate = screen.getByLabelText('Rate');
const delta = screen.getByLabelText('Delta');
expect(none).toBeChecked();
expect(rate).not.toBeChecked();
expect(delta).not.toBeChecked();
await userEvent.click(rate);
expect(onChange).toBeCalledWith(expect.objectContaining({ preprocessor: 'rate' }));
});
});