123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import { fireEvent, render, screen, within } from '@testing-library/react';
- import userEvent from '@testing-library/user-event';
- import React from 'react';
- import { Dimensions } from '..';
- import { setupMockedDataSource } from '../../__mocks__/CloudWatchDataSource';
- import { CloudWatchMetricsQuery } from '../../types';
- const ds = setupMockedDataSource({
- variables: [],
- });
- ds.datasource.getNamespaces = jest.fn().mockResolvedValue([]);
- ds.datasource.getMetrics = jest.fn().mockResolvedValue([]);
- ds.datasource.getDimensionKeys = jest.fn().mockResolvedValue([]);
- ds.datasource.getVariables = jest.fn().mockReturnValue([]);
- const q: CloudWatchMetricsQuery = {
- id: '',
- region: 'us-east-2',
- namespace: '',
- period: '',
- alias: '',
- metricName: '',
- dimensions: {},
- matchExact: true,
- statistic: '',
- expression: '',
- refId: '',
- };
- const props = {
- datasource: ds.datasource,
- query: q,
- disableExpressions: false,
- onChange: jest.fn(),
- onRunQuery: jest.fn(),
- };
- describe('Dimensions', () => {
- describe('when rendered with two existing dimensions', () => {
- it('should render two filter items', async () => {
- props.query.dimensions = {
- InstanceId: '*',
- InstanceGroup: 'Group1',
- };
- render(<Dimensions {...props} metricStat={props.query} dimensionKeys={[]} />);
- const filterItems = screen.getAllByTestId('cloudwatch-dimensions-filter-item');
- expect(filterItems.length).toBe(2);
- expect(within(filterItems[0]).getByText('InstanceId')).toBeInTheDocument();
- expect(within(filterItems[0]).getByText('*')).toBeInTheDocument();
- expect(within(filterItems[1]).getByText('InstanceGroup')).toBeInTheDocument();
- expect(within(filterItems[1]).getByText('Group1')).toBeInTheDocument();
- });
- });
- describe('when adding a new filter item', () => {
- it('it should add the new item but not call onChange', async () => {
- props.query.dimensions = {};
- const onChange = jest.fn();
- render(<Dimensions {...props} metricStat={props.query} onChange={onChange} dimensionKeys={[]} />);
- await userEvent.click(screen.getByLabelText('Add'));
- expect(screen.getByTestId('cloudwatch-dimensions-filter-item')).toBeInTheDocument();
- expect(onChange).not.toHaveBeenCalled();
- });
- });
- describe('when adding a new filter item with key', () => {
- it('it should add the new item but not call onChange', async () => {
- props.query.dimensions = {};
- const onChange = jest.fn();
- const { container } = render(
- <Dimensions {...props} metricStat={props.query} onChange={onChange} dimensionKeys={[]} />
- );
- await userEvent.click(screen.getByLabelText('Add'));
- const filterItemElement = screen.getByTestId('cloudwatch-dimensions-filter-item');
- expect(filterItemElement).toBeInTheDocument();
- const keyElement = container.querySelector('#cloudwatch-dimensions-filter-item-key');
- expect(keyElement).toBeInTheDocument();
- await userEvent.type(keyElement!, 'my-key');
- fireEvent.keyDown(keyElement!, { keyCode: 13 });
- expect(onChange).not.toHaveBeenCalled();
- });
- });
- describe('when adding a new filter item with key and value', () => {
- it('it should add the new item and trigger onChange', async () => {
- props.query.dimensions = {};
- const onChange = jest.fn();
- const { container } = render(
- <Dimensions {...props} metricStat={props.query} onChange={onChange} dimensionKeys={[]} />
- );
- const label = await screen.findByLabelText('Add');
- await userEvent.click(label);
- const filterItemElement = screen.getByTestId('cloudwatch-dimensions-filter-item');
- expect(filterItemElement).toBeInTheDocument();
- const keyElement = container.querySelector('#cloudwatch-dimensions-filter-item-key');
- expect(keyElement).toBeInTheDocument();
- await userEvent.type(keyElement!, 'my-key');
- fireEvent.keyDown(keyElement!, { keyCode: 13 });
- expect(onChange).not.toHaveBeenCalled();
- const valueElement = container.querySelector('#cloudwatch-dimensions-filter-item-value');
- expect(valueElement).toBeInTheDocument();
- await userEvent.type(valueElement!, 'my-value');
- fireEvent.keyDown(valueElement!, { keyCode: 13 });
- expect(onChange).not.toHaveBeenCalledWith({
- ...props.query,
- dimensions: {
- 'my-key': 'my-value',
- },
- });
- });
- });
- });
|