Submit
Path:
~
/
/
usr
/
share
/
grafana
/
public
/
app
/
plugins
/
datasource
/
azuremonitor
/
components
/
ArgQueryEditor
/
File Content:
ArgQueryEditor.test.tsx
import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import createMockDatasource from '../../__mocks__/datasource'; import createMockQuery from '../../__mocks__/query'; import { selectors } from '../../e2e/selectors'; import ArgQueryEditor from './ArgQueryEditor'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), getTemplateSrv: () => ({ replace: (val: string) => { return val; }, }), })); const variableOptionGroup = { label: 'Template variables', options: [], }; const defaultProps = { query: createMockQuery(), datasource: createMockDatasource(), variableOptionGroup: variableOptionGroup, onChange: jest.fn(), setError: jest.fn(), }; describe('ArgQueryEditor', () => { it('should render', async () => { render(<ArgQueryEditor {...defaultProps} />); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); }); it('should select a subscription from the fetched array', async () => { const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([{ value: 'foo' }]), }); const onChange = jest.fn(); render(<ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} />); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo'] })); }); it('should select a subscription from existing query', async () => { const onChange = jest.fn(); const query = createMockQuery({ subscriptions: ['bar'], }); render(<ArgQueryEditor {...defaultProps} onChange={onChange} query={query} />); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['bar'] })); }); it('should change the subscription if the selected one is not part of the fetched array', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([{ value: 'foo' }]), }); const query = createMockQuery({ subscriptions: ['bar'], }); render(<ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={query} />); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo'] })); expect(onChange).not.toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['bar'] })); }); it('should keep a subset of subscriptions if the new list does not contain all the query subscriptions', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([{ value: 'foo' }, { value: 'bar' }]), }); const query = createMockQuery({ subscriptions: ['foo', 'bar', 'foobar'], }); render(<ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={query} />); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo', 'bar'] })); expect(onChange).not.toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo', 'bar', 'foobar'] })); }); it('should keep a template variable if used in the subscription field', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([{ value: 'foo' }]), }); const query = createMockQuery({ subscriptions: ['$test'], }); render( <ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={query} variableOptionGroup={{ label: 'Template Variables', options: [{ label: '$test', value: '$test' }] }} /> ); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) ).toBeInTheDocument(); expect( await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.subscriptions.input) ).toHaveTextContent('$test'); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['$test'] })); }); it('should display an error if no subscription is selected', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([]), }); const query = createMockQuery({ subscriptions: [], }); render( <ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={query} variableOptionGroup={{ label: 'Template Variables', options: [] }} /> ); expect(await waitFor(() => screen.getByText('At least one subscription must be chosen.'))).toBeInTheDocument(); }); it('should display an error if subscriptions are cleared', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([{ text: 'foo', value: 'test-subscription-value' }]), }); const query = createMockQuery({ subscription: undefined, subscriptions: ['test-subscription-value'], }); const { rerender } = render( <ArgQueryEditor {...defaultProps} query={query} datasource={datasource} onChange={onChange} variableOptionGroup={{ label: 'Template Variables', options: [] }} /> ); expect(datasource.getSubscriptions).toHaveBeenCalled(); expect(await waitFor(() => onChange)).toHaveBeenCalledWith( expect.objectContaining({ subscriptions: ['test-subscription-value'] }) ); expect(await waitFor(() => screen.findByText('foo'))).toBeInTheDocument(); const clear = screen.getByLabelText('select-clear-value'); await userEvent.click(clear); expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: [] })); rerender( <ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={{ ...query, subscriptions: [] }} variableOptionGroup={{ label: 'Template Variables', options: [] }} /> ); expect(await waitFor(() => screen.getByText('At least one subscription must be chosen.'))).toBeInTheDocument(); }); it('should select all subscriptions if select all is chosen from the dropdown', async () => { const onChange = jest.fn(); const datasource = createMockDatasource({ getSubscriptions: jest.fn().mockResolvedValue([ { text: 'foo', value: 'test-subscription-value1' }, { text: 'bar', value: 'test-subscription-value2' }, { text: 'Select all subscriptions', value: 'Select all' }, ]), }); const query = createMockQuery({ subscription: undefined, subscriptions: ['test-subscription-value1', 'test-subscription-value2', 'Select all'], }); const { rerender } = render( <ArgQueryEditor {...defaultProps} query={query} datasource={datasource} onChange={onChange} variableOptionGroup={{ label: 'Template Variables', options: [] }} /> ); expect(datasource.getSubscriptions).toHaveBeenCalled(); expect(await waitFor(() => onChange)).toHaveBeenCalledWith( expect.objectContaining({ subscriptions: ['test-subscription-value1', 'test-subscription-value2', 'Select all'] }) ); expect(await waitFor(() => screen.findByText('foo'))).toBeInTheDocument(); expect(await waitFor(() => screen.findByText('bar'))).toBeInTheDocument(); expect(await waitFor(() => screen.findByText('Select all subscriptions'))).toBeInTheDocument(); const selectAll = screen.getByText('Select all subscriptions'); await userEvent.click(selectAll); expect(onChange).toHaveBeenCalledWith( expect.objectContaining({ subscriptions: ['test-subscription-value1', 'test-subscription-value2', 'Select all'] }) ); rerender( <ArgQueryEditor {...defaultProps} datasource={datasource} onChange={onChange} query={{ ...query, subscriptions: ['test-subscription-value1', 'test-subscription-value2', 'Select all'] }} variableOptionGroup={{ label: 'Template Variables', options: [] }} /> ); expect(await waitFor(() => screen.getByText('foo'))).toBeInTheDocument(); expect(await waitFor(() => screen.getByText('bar'))).toBeInTheDocument(); }); });
Edit
Rename
Chmod
Delete
FILE
FOLDER
INFO
Name
Size
Permission
Action
ArgQueryEditor.test.tsx
9062 bytes
0644
ArgQueryEditor.tsx
3866 bytes
0644
QueryField.tsx
740 bytes
0644
SubscriptionField.tsx
2632 bytes
0644
index.tsx
44 bytes
0644
N4ST4R_ID | Naxtarrr