123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { Observable, of, throwError } from 'rxjs';
- import { getDefaultTimeRange } from '@grafana/data';
- import { silenceConsoleOutput } from '../../../../../test/core/utils/silenceConsoleOutput';
- import * as store from '../../../../store/store';
- import * as annotationsSrv from '../../../annotations/executeAnnotationQuery';
- import { AnnotationsQueryRunner } from './AnnotationsQueryRunner';
- import { toAsyncOfResult } from './testHelpers';
- import { AnnotationQueryRunnerOptions } from './types';
- function getDefaultOptions(): AnnotationQueryRunnerOptions {
- const annotation: any = {};
- const dashboard: any = {};
- const datasource: any = {
- annotationQuery: {},
- annotations: {},
- };
- const range = getDefaultTimeRange();
- return { annotation, datasource, dashboard, range };
- }
- function getTestContext(result: Observable<any> = toAsyncOfResult({ events: [{ id: '1' }] })) {
- jest.clearAllMocks();
- const dispatchMock = jest.spyOn(store, 'dispatch');
- const options = getDefaultOptions();
- const executeAnnotationQueryMock = jest.spyOn(annotationsSrv, 'executeAnnotationQuery').mockReturnValue(result);
- return { options, dispatchMock, executeAnnotationQueryMock };
- }
- describe('AnnotationsQueryRunner', () => {
- const runner = new AnnotationsQueryRunner();
- describe('when canWork is called with correct props', () => {
- it('then it should return true', () => {
- const datasource: any = {
- annotationQuery: jest.fn(),
- annotations: {},
- };
- expect(runner.canRun(datasource)).toBe(true);
- });
- });
- describe('when canWork is called without datasource', () => {
- it('then it should return false', () => {
- const datasource: any = undefined;
- expect(runner.canRun(datasource)).toBe(false);
- });
- });
- describe('when canWork is called with incorrect props', () => {
- it('then it should return false', () => {
- const datasource: any = {
- annotationQuery: jest.fn(),
- };
- expect(runner.canRun(datasource)).toBe(false);
- });
- });
- describe('when run is called with unsupported props', () => {
- it('then it should return the correct results', async () => {
- const datasource: any = {
- annotationQuery: jest.fn(),
- };
- const { options, executeAnnotationQueryMock } = getTestContext();
- await expect(runner.run({ ...options, datasource })).toEmitValuesWith((received) => {
- expect(received).toHaveLength(1);
- const results = received[0];
- expect(results).toEqual([]);
- expect(executeAnnotationQueryMock).toHaveBeenCalledTimes(0);
- });
- });
- });
- describe('when run is called and the request is successful', () => {
- it('then it should return the correct results', async () => {
- const { options, executeAnnotationQueryMock } = getTestContext();
- await expect(runner.run(options)).toEmitValuesWith((received) => {
- expect(received).toHaveLength(1);
- const results = received[0];
- expect(results).toEqual([{ id: '1' }]);
- expect(executeAnnotationQueryMock).toHaveBeenCalledTimes(1);
- });
- });
- describe('but result is missing events prop', () => {
- it('then it should return the correct results', async () => {
- const { options, executeAnnotationQueryMock } = getTestContext(of({ id: '1' }));
- await expect(runner.run(options)).toEmitValuesWith((received) => {
- expect(received).toHaveLength(1);
- const results = received[0];
- expect(results).toEqual([]);
- expect(executeAnnotationQueryMock).toHaveBeenCalledTimes(1);
- });
- });
- });
- });
- describe('when run is called and the request fails', () => {
- silenceConsoleOutput();
- it('then it should return the correct results', async () => {
- const { options, executeAnnotationQueryMock, dispatchMock } = getTestContext(throwError({ message: 'An error' }));
- await expect(runner.run(options)).toEmitValuesWith((received) => {
- expect(received).toHaveLength(1);
- const results = received[0];
- expect(results).toEqual([]);
- expect(executeAnnotationQueryMock).toHaveBeenCalledTimes(1);
- expect(dispatchMock).toHaveBeenCalledTimes(1);
- });
- });
- });
- describe('when run is called and the request is cancelled', () => {
- silenceConsoleOutput();
- it('then it should return the correct results', async () => {
- const { options, executeAnnotationQueryMock, dispatchMock } = getTestContext(throwError({ cancelled: true }));
- await expect(runner.run(options)).toEmitValuesWith((received) => {
- expect(received).toHaveLength(1);
- const results = received[0];
- expect(results).toEqual([]);
- expect(executeAnnotationQueryMock).toHaveBeenCalledTimes(1);
- expect(dispatchMock).not.toHaveBeenCalled();
- });
- });
- });
- });
|