prometheus

Форк
0
/
ScrapePoolList.test.tsx 
81 строка · 3.2 Кб
1
import * as React from 'react';
2
import { mount, ReactWrapper } from 'enzyme';
3
import { act } from 'react-dom/test-utils';
4
import { Alert } from 'reactstrap';
5
import { sampleApiResponse } from './__testdata__/testdata';
6
import ScrapePoolList, { ScrapePoolPanel } from './ScrapePoolList';
7
import { Target } from './target';
8
import { FetchMock } from 'jest-fetch-mock/types';
9
import { PathPrefixContext } from '../../contexts/PathPrefixContext';
10

11
describe('ScrapePoolList', () => {
12
  beforeEach(() => {
13
    fetchMock.resetMocks();
14
  });
15

16
  describe('when data is returned', () => {
17
    let scrapePoolList: ReactWrapper;
18
    let mock: FetchMock;
19
    beforeEach(() => {
20
      //Tooltip requires DOM elements to exist. They do not in enzyme rendering so we must manually create them.
21
      const scrapePools: { [key: string]: number } = { blackbox: 3, node_exporter: 1, 'prometheus/test': 1 };
22
      Object.keys(scrapePools).forEach((pool: string): void => {
23
        Array.from(Array(scrapePools[pool]).keys()).forEach((idx: number): void => {
24
          const div = document.createElement('div');
25
          div.id = `series-labels-${pool}-${idx}`;
26
          document.body.appendChild(div);
27
          const div2 = document.createElement('div');
28
          div2.id = `scrape-duration-${pool}-${idx}`;
29
          document.body.appendChild(div2);
30
        });
31
      });
32
      mock = fetchMock.mockResponse(JSON.stringify(sampleApiResponse));
33
    });
34

35
    it('renders a table', async () => {
36
      await act(async () => {
37
        scrapePoolList = mount(
38
          <PathPrefixContext.Provider value="/path/prefix">
39
            <ScrapePoolList scrapePools={[]} selectedPool={null} onPoolSelect={jest.fn()} />
40
          </PathPrefixContext.Provider>
41
        );
42
      });
43
      scrapePoolList.update();
44
      expect(mock).toHaveBeenCalledWith('/path/prefix/api/v1/targets?state=active', {
45
        cache: 'no-store',
46
        credentials: 'same-origin',
47
      });
48
      const panels = scrapePoolList.find(ScrapePoolPanel);
49
      expect(panels).toHaveLength(3);
50
      const activeTargets: Target[] = sampleApiResponse.data.activeTargets as unknown as Target[];
51
      activeTargets.forEach(({ scrapePool }: Target) => {
52
        const panel = scrapePoolList.find(ScrapePoolPanel).filterWhere((panel) => panel.prop('scrapePool') === scrapePool);
53
        expect(panel).toHaveLength(1);
54
      });
55
    });
56
  });
57

58
  describe('when an error is returned', () => {
59
    it('displays an alert', async () => {
60
      const mock = fetchMock.mockReject(new Error('Error fetching targets'));
61

62
      let scrapePoolList: any;
63
      await act(async () => {
64
        scrapePoolList = mount(
65
          <PathPrefixContext.Provider value="/path/prefix">
66
            <ScrapePoolList scrapePools={[]} selectedPool={null} onPoolSelect={jest.fn()} />
67
          </PathPrefixContext.Provider>
68
        );
69
      });
70
      scrapePoolList.update();
71

72
      expect(mock).toHaveBeenCalledWith('/path/prefix/api/v1/targets?state=active', {
73
        cache: 'no-store',
74
        credentials: 'same-origin',
75
      });
76
      const alert = scrapePoolList.find(Alert);
77
      expect(alert.prop('color')).toBe('danger');
78
      expect(alert.text()).toContain('Error fetching targets');
79
    });
80
  });
81
});
82

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

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

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

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