import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { createMockDatasource } from '../__mocks__/cloudMonitoringDatasource';
import { createMockQuery } from '../__mocks__/cloudMonitoringQuery';
import { AnnotationQueryEditor } from './AnnotationQueryEditor';
jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'),
getTemplateSrv: () => ({
replace: (val: string) => val,
}),
}));
describe('AnnotationQueryEditor', () => {
it('renders correctly', async () => {
const onChange = jest.fn();
const onRunQuery = jest.fn();
const datasource = createMockDatasource();
const query = createMockQuery();
render();
expect(await screen.findByLabelText('Project')).toBeInTheDocument();
expect(await screen.findByLabelText('Service')).toBeInTheDocument();
expect(await screen.findByLabelText('Metric name')).toBeInTheDocument();
expect(await screen.findByLabelText('Group by')).toBeInTheDocument();
expect(await screen.findByLabelText('Group by function')).toBeInTheDocument();
expect(await screen.findByLabelText('Alignment function')).toBeInTheDocument();
expect(await screen.findByLabelText('Alignment period')).toBeInTheDocument();
expect(await screen.findByLabelText('Alias by')).toBeInTheDocument();
expect(await screen.findByLabelText('Title')).toBeInTheDocument();
expect(await screen.findByLabelText('Text')).toBeInTheDocument();
expect(await screen.findByText('Annotation Query Format')).toBeInTheDocument();
});
it('can set the title', async () => {
const onChange = jest.fn();
const onRunQuery = jest.fn();
const datasource = createMockDatasource();
const query = createMockQuery();
render();
const title = 'user-title';
await userEvent.type(screen.getByLabelText('Title'), title);
expect(await screen.findByDisplayValue(title)).toBeInTheDocument();
});
it('can set the text', async () => {
const onChange = jest.fn();
const onRunQuery = jest.fn();
const datasource = createMockDatasource();
const query = createMockQuery();
render();
const text = 'user-text';
await userEvent.type(screen.getByLabelText('Text'), text);
expect(await screen.findByDisplayValue(text)).toBeInTheDocument();
});
});