AlertRuleList.jest.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react';
  2. import moment from 'moment';
  3. import { AlertRuleList } from './AlertRuleList';
  4. import { RootStore } from 'app/stores/RootStore';
  5. import { backendSrv, createNavTree } from 'test/mocks/common';
  6. import { mount } from 'enzyme';
  7. import toJson from 'enzyme-to-json';
  8. describe('AlertRuleList', () => {
  9. let page, store;
  10. beforeAll(() => {
  11. backendSrv.get.mockReturnValue(
  12. Promise.resolve([
  13. {
  14. id: 11,
  15. dashboardId: 58,
  16. panelId: 3,
  17. name: 'Panel Title alert',
  18. state: 'ok',
  19. newStateDate: moment()
  20. .subtract(5, 'minutes')
  21. .format(),
  22. evalData: {},
  23. executionError: '',
  24. dashboardUri: 'db/mygool',
  25. },
  26. ])
  27. );
  28. store = RootStore.create(
  29. {},
  30. {
  31. backendSrv: backendSrv,
  32. navTree: createNavTree('alerting', 'alert-list'),
  33. }
  34. );
  35. page = mount(<AlertRuleList store={store} />);
  36. });
  37. it('should call api to get rules', () => {
  38. expect(backendSrv.get.mock.calls[0][0]).toEqual('/api/alerts');
  39. });
  40. it('should render 1 rule', () => {
  41. page.update();
  42. let ruleNode = page.find('.card-item-wrapper');
  43. expect(toJson(ruleNode)).toMatchSnapshot();
  44. });
  45. it('toggle state should change pause rule if not paused', async () => {
  46. backendSrv.post.mockReturnValue(
  47. Promise.resolve({
  48. state: 'paused',
  49. })
  50. );
  51. page.find('.fa-pause').simulate('click');
  52. // wait for api call to resolve
  53. await Promise.resolve();
  54. page.update();
  55. expect(store.alertList.rules[0].state).toBe('paused');
  56. expect(page.find('.fa-play')).toHaveLength(1);
  57. });
  58. });