prometheus

Форк
0
/
ExpressionInput.test.tsx 
69 строк · 2.6 Кб
1
import * as React from 'react';
2
import { mount, ReactWrapper } from 'enzyme';
3
import ExpressionInput from './ExpressionInput';
4
import { Button, InputGroup, InputGroupAddon } from 'reactstrap';
5
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
import { faSearch, faSpinner } from '@fortawesome/free-solid-svg-icons';
7

8
describe('ExpressionInput', () => {
9
  const expressionInputProps = {
10
    value: 'node_cpu',
11
    queryHistory: [],
12
    metricNames: [],
13
    executeQuery: (): void => {
14
      // Do nothing.
15
    },
16
    onExpressionChange: (): void => {
17
      // Do nothing.
18
    },
19
    loading: false,
20
    enableAutocomplete: true,
21
    enableHighlighting: true,
22
    enableLinter: true,
23
  };
24

25
  let expressionInput: ReactWrapper;
26
  beforeEach(() => {
27
    expressionInput = mount(<ExpressionInput {...expressionInputProps} />);
28
  });
29

30
  it('renders an InputGroup', () => {
31
    const inputGroup = expressionInput.find(InputGroup);
32
    expect(inputGroup.prop('className')).toEqual('expression-input');
33
  });
34

35
  it('renders a search icon when it is not loading', () => {
36
    const addon = expressionInput.find(InputGroupAddon).filterWhere((addon) => addon.prop('addonType') === 'prepend');
37
    const icon = addon.find(FontAwesomeIcon);
38
    expect(icon.prop('icon')).toEqual(faSearch);
39
  });
40

41
  it('renders a loading icon when it is loading', () => {
42
    const expressionInput = mount(<ExpressionInput {...expressionInputProps} loading={true} />);
43
    const addon = expressionInput.find(InputGroupAddon).filterWhere((addon) => addon.prop('addonType') === 'prepend');
44
    const icon = addon.find(FontAwesomeIcon);
45
    expect(icon.prop('icon')).toEqual(faSpinner);
46
    expect(icon.prop('spin')).toBe(true);
47
  });
48

49
  it('renders a CodeMirror expression input', () => {
50
    const input = expressionInput.find('div.cm-expression-input');
51
    expect(input.text()).toContain('node_cpu');
52
  });
53

54
  it('renders an execute button', () => {
55
    const addon = expressionInput.find(InputGroupAddon).filterWhere((addon) => addon.prop('addonType') === 'append');
56
    const button = addon.find(Button).find('.execute-btn').first();
57
    expect(button.prop('color')).toEqual('primary');
58
    expect(button.text()).toEqual('Execute');
59
  });
60

61
  it('executes the query when clicking the execute button', () => {
62
    const spyExecuteQuery = jest.fn();
63
    const props = { ...expressionInputProps, executeQuery: spyExecuteQuery };
64
    const wrapper = mount(<ExpressionInput {...props} />);
65
    const btn = wrapper.find(Button).filterWhere((btn) => btn.hasClass('execute-btn'));
66
    btn.simulate('click');
67
    expect(spyExecuteQuery).toHaveBeenCalledTimes(1);
68
  });
69
});
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.