Procházet zdrojové kódy

Reworked ResultProcessor tests

Torkel Ödegaard před 6 roky
rodič
revize
443e8d8daa
1 změnil soubory, kde provedl 373 přidání a 440 odebrání
  1. 373 440
      public/app/features/explore/utils/ResultProcessor.test.ts

+ 373 - 440
public/app/features/explore/utils/ResultProcessor.test.ts

@@ -1,440 +1,373 @@
-// jest.mock('@grafana/data/src/utils/moment_wrapper', () => ({
-//   dateTime: (ts: any) => {
-//     return {
-//       valueOf: () => ts,
-//       fromNow: () => 'fromNow() jest mocked',
-//       format: (fmt: string) => 'format() jest mocked',
-//     };
-//   },
-//   toUtc: (ts: any) => {
-//     return {
-//       format: (fmt: string) => 'format() jest mocked',
-//     };
-//   },
-// }));
-//
-// import { ResultProcessor } from './ResultProcessor';
-// import { ExploreItemState, ExploreMode } from 'app/types/explore';
-// import TableModel from 'app/core/table_model';
-// import { TimeSeries, LogRowModel, LogsMetaItem, GraphSeriesXY } from '@grafana/data';
-//
-// const testContext = (options: any = {}) => {
-//   const response = [
-//     {
-//       target: 'A-series',
-//       alias: 'A-series',
-//       datapoints: [[39.91264531864214, 1559038518831], [40.35179822906545, 1559038519831]],
-//       refId: 'A',
-//     },
-//     {
-//       columns: [
-//         {
-//           text: 'Time',
-//         },
-//         {
-//           text: 'Message',
-//         },
-//         {
-//           text: 'Description',
-//         },
-//         {
-//           text: 'Value',
-//         },
-//       ],
-//       rows: [
-//         [1559038518831, 'This is a message', 'Description', 23.1],
-//         [1559038519831, 'This is a message', 'Description', 23.1],
-//       ],
-//       refId: 'B',
-//     },
-//   ];
-//   const defaultOptions = {
-//     mode: ExploreMode.Metrics,
-//     replacePreviousResults: true,
-//     result: { data: response },
-//     graphResult: [] as TimeSeries[],
-//     tableResult: new TableModel(),
-//     logsResult: { hasUniqueLabels: false, rows: [] as LogRowModel[] },
-//   };
-//   const combinedOptions = { ...defaultOptions, ...options };
-//   const state = ({
-//     mode: combinedOptions.mode,
-//     graphResult: combinedOptions.graphResult,
-//     tableResult: combinedOptions.tableResult,
-//     logsResult: combinedOptions.logsResult,
-//     queryIntervals: { intervalMs: 10 },
-//   } as any) as ExploreItemState;
-//   const resultProcessor = new ResultProcessor(state, combinedOptions.replacePreviousResults, combinedOptions.result);
-//
-//   return {
-//     result: combinedOptions.result,
-//     resultProcessor,
-//   };
-// };
-//
-// describe('ResultProcessor', () => {
-//   describe('constructed without result', () => {
-//     describe('when calling getRawData', () => {
-//       it('then it should return an empty array', () => {
-//         const { resultProcessor } = testContext({ result: null });
-//         const theResult = resultProcessor.getRawData();
-//
-//         expect(theResult).toEqual([]);
-//       });
-//     });
-//
-//     describe('when calling getGraphResult', () => {
-//       it('then it should return an empty array', () => {
-//         const { resultProcessor } = testContext({ result: null });
-//         const theResult = resultProcessor.getGraphResult();
-//
-//         expect(theResult).toEqual([]);
-//       });
-//     });
-//
-//     describe('when calling getTableResult', () => {
-//       it('then it should return an empty TableModel', () => {
-//         const { resultProcessor } = testContext({ result: null });
-//         const theResult = resultProcessor.getTableResult();
-//
-//         expect(theResult).toEqual(new TableModel());
-//       });
-//     });
-//
-//     describe('when calling getLogsResult', () => {
-//       it('then it should return null', () => {
-//         const { resultProcessor } = testContext({ result: null });
-//         const theResult = resultProcessor.getLogsResult();
-//
-//         expect(theResult).toBeNull();
-//       });
-//     });
-//   });
-//
-//   describe('constructed with a result that is a DataQueryResponse', () => {
-//     describe('when calling getRawData', () => {
-//       it('then it should return result.data', () => {
-//         const { result, resultProcessor } = testContext();
-//         const theResult = resultProcessor.getRawData();
-//
-//         expect(theResult).toEqual(result.data);
-//       });
-//     });
-//
-//     describe('when calling getGraphResult', () => {
-//       it('then it should return correct graph result', () => {
-//         const { resultProcessor } = testContext();
-//         const theResult = resultProcessor.getGraphResult();
-//
-//         expect(theResult).toEqual([
-//           {
-//             label: 'A-series',
-//             color: '#7EB26D',
-//             data: [[1559038518831, 39.91264531864214], [1559038519831, 40.35179822906545]],
-//             info: undefined,
-//             isVisible: true,
-//             yAxis: {
-//               index: 1,
-//             },
-//           },
-//         ]);
-//       });
-//     });
-//
-//     describe('when calling getTableResult', () => {
-//       it('then it should return correct table result', () => {
-//         const { resultProcessor } = testContext();
-//         const theResult = resultProcessor.getTableResult();
-//
-//         expect(theResult).toEqual({
-//           columnMap: {},
-//           columns: [{ text: 'Time' }, { text: 'Message' }, { text: 'Description' }, { text: 'Value' }],
-//           rows: [
-//             [1559038518831, 'This is a message', 'Description', 23.1],
-//             [1559038519831, 'This is a message', 'Description', 23.1],
-//           ],
-//           type: 'table',
-//         });
-//       });
-//     });
-//
-//     describe('when calling getLogsResult', () => {
-//       it('then it should return correct logs result', () => {
-//         const { resultProcessor } = testContext({ mode: ExploreMode.Logs, observerResponse: null });
-//         const theResult = resultProcessor.getLogsResult();
-//
-//         console.log(JSON.stringify(theResult));
-//
-//         expect(theResult).toEqual({
-//           hasUniqueLabels: false,
-//           meta: [],
-//           rows: [
-//             {
-//               entry: 'This is a message',
-//               hasAnsi: false,
-//               labels: undefined,
-//               logLevel: 'unknown',
-//               raw: 'This is a message',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1559038519831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1559038519831,
-//               uniqueLabels: {},
-//             },
-//             {
-//               entry: 'This is a message',
-//               hasAnsi: false,
-//               labels: undefined,
-//               logLevel: 'unknown',
-//               raw: 'This is a message',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1559038518831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1559038518831,
-//               uniqueLabels: {},
-//             },
-//           ],
-//           series: [
-//             {
-//               label: 'A-series',
-//               color: '#7EB26D',
-//               data: [[1559038518831, 39.91264531864214], [1559038519831, 40.35179822906545]],
-//               info: undefined,
-//               isVisible: true,
-//               yAxis: {
-//                 index: 1,
-//               },
-//             },
-//           ],
-//         });
-//       });
-//     });
-//   });
-//
-//   describe('constructed with result that is a DataQueryResponse and merging with previous results', () => {
-//     describe('when calling getRawData', () => {
-//       it('then it should return result.data', () => {
-//         const { result, resultProcessor } = testContext();
-//         const theResult = resultProcessor.getRawData();
-//
-//         expect(theResult).toEqual(result.data);
-//       });
-//     });
-//
-//     describe('when calling getGraphResult', () => {
-//       it('then it should return correct graph result', () => {
-//         const { resultProcessor } = testContext({
-//           replacePreviousResults: false,
-//           graphResult: [
-//             {
-//               label: 'A-series',
-//               color: '#7EB26D',
-//               data: [[1558038518831, 19.91264531864214], [1558038518831, 20.35179822906545]],
-//               info: undefined,
-//               isVisible: true,
-//               yAxis: {
-//                 index: 1,
-//               },
-//             },
-//           ],
-//         });
-//         const theResult = resultProcessor.getGraphResult();
-//
-//         expect(theResult).toEqual([
-//           {
-//             label: 'A-series',
-//             color: '#7EB26D',
-//             data: [
-//               [1558038518831, 19.91264531864214],
-//               [1558038518831, 20.35179822906545],
-//               [1559038518831, 39.91264531864214],
-//               [1559038519831, 40.35179822906545],
-//             ],
-//             info: undefined,
-//             isVisible: true,
-//             yAxis: {
-//               index: 1,
-//             },
-//           },
-//         ]);
-//       });
-//     });
-//
-//     describe('when calling getTableResult', () => {
-//       it('then it should return correct table result', () => {
-//         const { resultProcessor } = testContext({
-//           replacePreviousResults: false,
-//           tableResult: {
-//             columnMap: {},
-//             columns: [{ text: 'Time' }, { text: 'Message' }, { text: 'Description' }, { text: 'Value' }],
-//             rows: [
-//               [1558038518831, 'This is a previous message 1', 'Previous Description 1', 21.1],
-//               [1558038519831, 'This is a previous message 2', 'Previous Description 2', 22.1],
-//             ],
-//             type: 'table',
-//           },
-//         });
-//         const theResult = resultProcessor.getTableResult();
-//
-//         expect(theResult).toEqual({
-//           columnMap: {},
-//           columns: [{ text: 'Time' }, { text: 'Message' }, { text: 'Description' }, { text: 'Value' }],
-//           rows: [
-//             [1558038518831, 'This is a previous message 1', 'Previous Description 1', 21.1],
-//             [1558038519831, 'This is a previous message 2', 'Previous Description 2', 22.1],
-//             [1559038518831, 'This is a message', 'Description', 23.1],
-//             [1559038519831, 'This is a message', 'Description', 23.1],
-//           ],
-//           type: 'table',
-//         });
-//       });
-//     });
-//
-//     describe('when calling getLogsResult', () => {
-//       it('then it should return correct logs result', () => {
-//         const { resultProcessor } = testContext({
-//           mode: ExploreMode.Logs,
-//           replacePreviousResults: false,
-//           logsResult: {
-//             hasUniqueLabels: false,
-//             meta: [],
-//             rows: [
-//               {
-//                 entry: 'This is a previous message 1',
-//                 fresh: true,
-//                 hasAnsi: false,
-//                 labels: { cluster: 'some-cluster' },
-//                 logLevel: 'unknown',
-//                 raw: 'This is a previous message 1',
-//                 searchWords: [] as string[],
-//                 timeEpochMs: 1558038519831,
-//                 timeFromNow: 'fromNow() jest mocked',
-//                 timeLocal: 'format() jest mocked',
-//                 timeUtc: 'format() jest mocked',
-//                 timestamp: 1558038519831,
-//                 uniqueLabels: {},
-//               },
-//               {
-//                 entry: 'This is a previous message 2',
-//                 fresh: true,
-//                 hasAnsi: false,
-//                 labels: { cluster: 'some-cluster' },
-//                 logLevel: 'unknown',
-//                 raw: 'This is a previous message 2',
-//                 searchWords: [] as string[],
-//                 timeEpochMs: 1558038518831,
-//                 timeFromNow: 'fromNow() jest mocked',
-//                 timeLocal: 'format() jest mocked',
-//                 timeUtc: 'format() jest mocked',
-//                 timestamp: 1558038518831,
-//                 uniqueLabels: {},
-//               },
-//             ],
-//             series: [
-//               {
-//                 label: 'A-series',
-//                 color: '#7EB26D',
-//                 data: [[1558038518831, 37.91264531864214], [1558038519831, 38.35179822906545]],
-//                 info: undefined,
-//                 isVisible: true,
-//                 yAxis: {
-//                   index: 1,
-//                 },
-//               },
-//             ],
-//           },
-//         });
-//         const theResult = resultProcessor.getLogsResult();
-//         const expected = {
-//           hasUniqueLabels: false,
-//           meta: [] as LogsMetaItem[],
-//           rows: [
-//             {
-//               entry: 'This is a previous message 1',
-//               fresh: false,
-//               hasAnsi: false,
-//               labels: { cluster: 'some-cluster' },
-//               logLevel: 'unknown',
-//               raw: 'This is a previous message 1',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1558038519831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1558038519831,
-//               uniqueLabels: {},
-//             },
-//             {
-//               entry: 'This is a previous message 2',
-//               fresh: false,
-//               hasAnsi: false,
-//               labels: { cluster: 'some-cluster' },
-//               logLevel: 'unknown',
-//               raw: 'This is a previous message 2',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1558038518831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1558038518831,
-//               uniqueLabels: {},
-//             },
-//             {
-//               entry: 'This is a message',
-//               fresh: true,
-//               hasAnsi: false,
-//               labels: undefined,
-//               logLevel: 'unknown',
-//               raw: 'This is a message',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1559038519831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1559038519831,
-//               uniqueLabels: {},
-//             },
-//             {
-//               entry: 'This is a message',
-//               fresh: true,
-//               hasAnsi: false,
-//               labels: undefined,
-//               logLevel: 'unknown',
-//               raw: 'This is a message',
-//               searchWords: [] as string[],
-//               timeEpochMs: 1559038518831,
-//               timeFromNow: 'fromNow() jest mocked',
-//               timeLocal: 'format() jest mocked',
-//               timeUtc: 'format() jest mocked',
-//               timestamp: 1559038518831,
-//               uniqueLabels: {},
-//             },
-//           ],
-//           series: [
-//             {
-//               label: 'A-series',
-//               color: '#7EB26D',
-//               data: [
-//                 [1558038518831, 37.91264531864214],
-//                 [1558038519831, 38.35179822906545],
-//                 [1559038518831, 39.91264531864214],
-//                 [1559038519831, 40.35179822906545],
-//               ],
-//               info: undefined,
-//               isVisible: true,
-//               yAxis: {
-//                 index: 1,
-//               },
-//             } as GraphSeriesXY,
-//           ],
-//         };
-//
-//         expect(theResult).toEqual(expected);
-//       });
-//     });
-//   });
-// });
+jest.mock('@grafana/data/src/utils/moment_wrapper', () => ({
+  dateTime: (ts: any) => {
+    return {
+      valueOf: () => ts,
+      fromNow: () => 'fromNow() jest mocked',
+      format: (fmt: string) => 'format() jest mocked',
+    };
+  },
+  toUtc: (ts: any) => {
+    return {
+      format: (fmt: string) => 'format() jest mocked',
+    };
+  },
+}));
+
+import { ResultProcessor } from './ResultProcessor';
+import { ExploreItemState, ExploreMode } from 'app/types/explore';
+import TableModel from 'app/core/table_model';
+import {
+  TimeSeries,
+  LogRowModel,
+  LogsMetaItem,
+  GraphSeriesXY,
+  MutableDataFrame,
+  toDataFrame,
+  FieldType,
+} from '@grafana/data';
+
+const testContext = (options: any = {}) => {
+  const timeSeries = toDataFrame({
+    name: 'A-series',
+    refId: 'A',
+    fields: [
+      { name: 'A-series', type: FieldType.number, values: [4, 5, 6] },
+      { name: 'time', type: FieldType.time, values: [100, 200, 300] },
+    ],
+  });
+
+  const table = toDataFrame({
+    name: 'table-res',
+    refId: 'A',
+    fields: [
+      { name: 'value', type: FieldType.number, values: [4, 5, 6] },
+      { name: 'time', type: FieldType.time, values: [100, 200, 300] },
+      { name: 'message', type: FieldType.string, values: ['this is a message', 'second message', 'third'] },
+    ],
+  });
+
+  const defaultOptions = {
+    mode: ExploreMode.Metrics,
+    replacePreviousResults: true,
+    dataFrames: [timeSeries, table],
+    graphResult: [] as TimeSeries[],
+    tableResult: new TableModel(),
+    logsResult: { hasUniqueLabels: false, rows: [] as LogRowModel[] },
+  };
+
+  const combinedOptions = { ...defaultOptions, ...options };
+
+  const state = ({
+    mode: combinedOptions.mode,
+    graphResult: combinedOptions.graphResult,
+    tableResult: combinedOptions.tableResult,
+    logsResult: combinedOptions.logsResult,
+    queryIntervals: { intervalMs: 10 },
+  } as any) as ExploreItemState;
+
+  const resultProcessor = new ResultProcessor(
+    state,
+    combinedOptions.replacePreviousResults,
+    combinedOptions.dataFrames
+  );
+
+  return {
+    dataFrames: combinedOptions.dataFrames,
+    resultProcessor,
+  };
+};
+
+describe('ResultProcessor', () => {
+  describe('constructed without result', () => {
+    describe('when calling getGraphResult', () => {
+      it('then it should return an empty array', () => {
+        const { resultProcessor } = testContext({ dataFrames: [] });
+        const theResult = resultProcessor.getGraphResult();
+
+        expect(theResult).toEqual([]);
+      });
+    });
+
+    describe('when calling getTableResult', () => {
+      it('then it should return an empty TableModel', () => {
+        const { resultProcessor } = testContext({ dataFrames: [] });
+        const theResult = resultProcessor.getTableResult();
+
+        expect(theResult).toEqual(new TableModel());
+      });
+    });
+
+    describe('when calling getLogsResult', () => {
+      it('then it should return null', () => {
+        const { resultProcessor } = testContext({ dataFrames: [] });
+        const theResult = resultProcessor.getLogsResult();
+
+        expect(theResult).toBeNull();
+      });
+    });
+  });
+
+  describe('constructed with a result that is a DataQueryResponse', () => {
+    describe('when calling getGraphResult', () => {
+      it('then it should return correct graph result', () => {
+        const { resultProcessor } = testContext();
+        const theResult = resultProcessor.getGraphResult();
+
+        expect(theResult).toEqual([
+          {
+            label: 'A-series',
+            color: '#7EB26D',
+            data: [[100, 4], [200, 5], [300, 6]],
+            info: undefined,
+            isVisible: true,
+            yAxis: {
+              index: 1,
+            },
+          },
+        ]);
+      });
+    });
+
+    describe('when calling getTableResult', () => {
+      it('then it should return correct table result', () => {
+        const { resultProcessor } = testContext();
+        const theResult = resultProcessor.getTableResult();
+
+        expect(theResult).toEqual({
+          columnMap: {},
+          columns: [
+            { text: 'value', type: 'number', filterable: undefined },
+            { text: 'time', type: 'time', filterable: undefined },
+            { text: 'message', type: 'string', filterable: undefined },
+          ],
+          rows: [[4, 100, 'this is a message'], [5, 200, 'second message'], [6, 300, 'third']],
+          type: 'table',
+        });
+      });
+    });
+
+    describe('when calling getLogsResult', () => {
+      it('then it should return correct logs result', () => {
+        const { resultProcessor } = testContext({ mode: ExploreMode.Logs });
+        const theResult = resultProcessor.getLogsResult();
+
+        expect(theResult).toEqual({
+          hasUniqueLabels: false,
+          meta: [],
+          rows: [
+            {
+              entry: 'third',
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'third',
+              searchWords: [] as string[],
+              timeEpochMs: 300,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 300,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'second message',
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'second message',
+              searchWords: [] as string[],
+              timeEpochMs: 200,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 200,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'this is a message',
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'this is a message',
+              searchWords: [] as string[],
+              timeEpochMs: 100,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 100,
+              uniqueLabels: {},
+            },
+          ],
+          series: [
+            {
+              label: 'A-series',
+              color: '#7EB26D',
+              data: [[100, 4], [200, 5], [300, 6]],
+              info: undefined,
+              isVisible: true,
+              yAxis: {
+                index: 1,
+              },
+            },
+          ],
+        });
+      });
+    });
+  });
+
+  describe('constructed with result that is a DataQueryResponse and merging with previous results', () => {
+    describe('when calling getLogsResult', () => {
+      it('then it should return correct logs result', () => {
+        const { resultProcessor } = testContext({
+          mode: ExploreMode.Logs,
+          replacePreviousResults: false,
+          logsResult: {
+            hasUniqueLabels: false,
+            meta: [],
+            rows: [
+              {
+                entry: 'This is a previous message 1',
+                fresh: true,
+                hasAnsi: false,
+                labels: { cluster: 'some-cluster' },
+                logLevel: 'unknown',
+                raw: 'This is a previous message 1',
+                searchWords: [] as string[],
+                timeEpochMs: 1558038519831,
+                timeFromNow: 'fromNow() jest mocked',
+                timeLocal: 'format() jest mocked',
+                timeUtc: 'format() jest mocked',
+                timestamp: 1558038519831,
+                uniqueLabels: {},
+              },
+              {
+                entry: 'This is a previous message 2',
+                fresh: true,
+                hasAnsi: false,
+                labels: { cluster: 'some-cluster' },
+                logLevel: 'unknown',
+                raw: 'This is a previous message 2',
+                searchWords: [] as string[],
+                timeEpochMs: 1558038518831,
+                timeFromNow: 'fromNow() jest mocked',
+                timeLocal: 'format() jest mocked',
+                timeUtc: 'format() jest mocked',
+                timestamp: 1558038518831,
+                uniqueLabels: {},
+              },
+            ],
+            series: [
+              {
+                label: 'A-series',
+                color: '#7EB26D',
+                data: [[1558038518831, 37.91264531864214], [1558038519831, 38.35179822906545]],
+                info: undefined,
+                isVisible: true,
+                yAxis: {
+                  index: 1,
+                },
+              },
+            ],
+          },
+        });
+
+        const theResult = resultProcessor.getLogsResult();
+        const expected = {
+          hasUniqueLabels: false,
+          meta: [] as LogsMetaItem[],
+          rows: [
+            {
+              entry: 'This is a previous message 1',
+              fresh: false,
+              hasAnsi: false,
+              labels: { cluster: 'some-cluster' },
+              logLevel: 'unknown',
+              raw: 'This is a previous message 1',
+              searchWords: [] as string[],
+              timeEpochMs: 1558038519831,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 1558038519831,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'This is a previous message 2',
+              fresh: false,
+              hasAnsi: false,
+              labels: { cluster: 'some-cluster' },
+              logLevel: 'unknown',
+              raw: 'This is a previous message 2',
+              searchWords: [] as string[],
+              timeEpochMs: 1558038518831,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 1558038518831,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'third',
+              fresh: true,
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'third',
+              searchWords: [] as string[],
+              timeEpochMs: 300,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 300,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'second message',
+              fresh: true,
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'second message',
+              searchWords: [] as string[],
+              timeEpochMs: 200,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 200,
+              uniqueLabels: {},
+            },
+            {
+              entry: 'this is a message',
+              fresh: true,
+              hasAnsi: false,
+              labels: undefined,
+              logLevel: 'unknown',
+              raw: 'this is a message',
+              searchWords: [] as string[],
+              timeEpochMs: 100,
+              timeFromNow: 'fromNow() jest mocked',
+              timeLocal: 'format() jest mocked',
+              timeUtc: 'format() jest mocked',
+              timestamp: 100,
+              uniqueLabels: {},
+            },
+          ],
+          series: [
+            {
+              label: 'A-series',
+              color: '#7EB26D',
+              data: [[100, 4], [200, 5], [300, 6]],
+              info: undefined,
+              isVisible: true,
+              yAxis: {
+                index: 1,
+              },
+            } as GraphSeriesXY,
+          ],
+        };
+
+        expect(theResult).toEqual(expected);
+      });
+    });
+  });
+});