| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import React from 'react';
- import { shallow } from 'enzyme';
- import { AlertRuleList, Props } from './AlertRuleList';
- import { AlertRule, NavModel } from '../../types';
- import appEvents from '../../core/app_events';
- jest.mock('../../core/app_events', () => ({
- emit: jest.fn(),
- }));
- const setup = (propOverrides?: object) => {
- const props: Props = {
- navModel: {} as NavModel,
- alertRules: [] as AlertRule[],
- updateLocation: jest.fn(),
- getAlertRulesAsync: jest.fn(),
- setSearchQuery: jest.fn(),
- togglePauseAlertRule: jest.fn(),
- stateFilter: '',
- search: '',
- isLoading: false
- };
- Object.assign(props, propOverrides);
- const wrapper = shallow(<AlertRuleList {...props} />);
- return {
- wrapper,
- instance: wrapper.instance() as AlertRuleList,
- };
- };
- describe('Render', () => {
- it('should render component', () => {
- const { wrapper } = setup();
- expect(wrapper).toMatchSnapshot();
- });
- it('should render alert rules', () => {
- const { wrapper } = setup({
- alertRules: [
- {
- id: 1,
- dashboardId: 7,
- dashboardUid: 'ggHbN42mk',
- dashboardSlug: 'alerting-with-testdata',
- panelId: 3,
- name: 'TestData - Always OK',
- state: 'ok',
- newStateDate: '2018-09-04T10:01:01+02:00',
- evalDate: '0001-01-01T00:00:00Z',
- evalData: {},
- executionError: '',
- url: '/d/ggHbN42mk/alerting-with-testdata',
- },
- {
- id: 3,
- dashboardId: 7,
- dashboardUid: 'ggHbN42mk',
- dashboardSlug: 'alerting-with-testdata',
- panelId: 3,
- name: 'TestData - ok',
- state: 'ok',
- newStateDate: '2018-09-04T10:01:01+02:00',
- evalDate: '0001-01-01T00:00:00Z',
- evalData: {},
- executionError: 'error',
- url: '/d/ggHbN42mk/alerting-with-testdata',
- },
- ],
- });
- expect(wrapper).toMatchSnapshot();
- });
- });
- describe('Life cycle', () => {
- describe('component did mount', () => {
- it('should call fetchrules', () => {
- const { instance } = setup();
- instance.fetchRules = jest.fn();
- instance.componentDidMount();
- expect(instance.fetchRules).toHaveBeenCalled();
- });
- });
- describe('component did update', () => {
- it('should call fetchrules if props differ', () => {
- const { instance } = setup();
- instance.fetchRules = jest.fn();
- instance.componentDidUpdate({ stateFilter: 'ok' } as Props);
- expect(instance.fetchRules).toHaveBeenCalled();
- });
- });
- });
- describe('Functions', () => {
- describe('Get state filter', () => {
- it('should get all if prop is not set', () => {
- const { instance } = setup();
- const stateFilter = instance.getStateFilter();
- expect(stateFilter).toEqual('all');
- });
- it('should return state filter if set', () => {
- const { instance } = setup({
- stateFilter: 'ok',
- });
- const stateFilter = instance.getStateFilter();
- expect(stateFilter).toEqual('ok');
- });
- });
- describe('State filter changed', () => {
- it('should update location', () => {
- const { instance } = setup();
- const mockEvent = { target: { value: 'alerting' } } as React.ChangeEvent<HTMLSelectElement>;
- instance.onStateFilterChanged(mockEvent);
- expect(instance.props.updateLocation).toHaveBeenCalledWith({ query: { state: 'alerting' } });
- });
- });
- describe('Open how to', () => {
- it('should emit show-modal event', () => {
- const { instance } = setup();
- instance.onOpenHowTo();
- expect(appEvents.emit).toHaveBeenCalledWith('show-modal', {
- src: 'public/app/features/alerting/partials/alert_howto.html',
- modalClass: 'confirm-modal',
- model: {},
- });
- });
- });
- describe('Search query change', () => {
- it('should set search query', () => {
- const { instance } = setup();
- const mockEvent = { target: { value: 'dashboard' } } as React.ChangeEvent<HTMLInputElement>;
- instance.onSearchQueryChange(mockEvent);
- expect(instance.props.setSearchQuery).toHaveBeenCalledWith('dashboard');
- });
- });
- });
|