AlertRuleList.test.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React from 'react';
  2. import moment from 'moment';
  3. import { AlertRuleList } from './AlertRuleList';
  4. import { RootStore } from 'app/stores/RootStore/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. url: 'd/ufkcofof/my-goal',
  25. canEdit: true,
  26. },
  27. ])
  28. );
  29. store = RootStore.create(
  30. {},
  31. {
  32. backendSrv: backendSrv,
  33. navTree: createNavTree('alerting', 'alert-list'),
  34. }
  35. );
  36. page = mount(<AlertRuleList {...store} />);
  37. });
  38. it('should call api to get rules', () => {
  39. expect(backendSrv.get.mock.calls[0][0]).toEqual('/api/alerts');
  40. });
  41. it('should render 1 rule', () => {
  42. page.update();
  43. let ruleNode = page.find('.alert-rule-item');
  44. expect(toJson(ruleNode)).toMatchSnapshot();
  45. });
  46. it('toggle state should change pause rule if not paused', async () => {
  47. backendSrv.post.mockReturnValue(
  48. Promise.resolve({
  49. state: 'paused',
  50. })
  51. );
  52. page.find('.fa-pause').simulate('click');
  53. // wait for api call to resolve
  54. await Promise.resolve();
  55. page.update();
  56. expect(store.alertList.rules[0].state).toBe('paused');
  57. expect(page.find('.fa-play')).toHaveLength(1);
  58. });
  59. });