From 8c1307e704891cbb964f4caf65894d6ac1dfeeec Mon Sep 17 00:00:00 2001 From: Lukas Siatka Date: Mon, 25 May 2020 03:44:37 +0200 Subject: [PATCH] Explore: refactors LogRowContextProvider to get rid of unnecessary dimensions (#24899) * Chore: refactors LogRowContextProvider to get rid of unnecessary array dimensions * Chore: removes unnecessary array dimensions from LogRowContextProvider test * Chore: changes LogRowContextProvider test to use jest mock * Chore: updates LogRowContextProvider test * Chore: removes unnecessary wrapper variable in LogRowContextProvider test --- .../Logs/LogRowContextProvider.test.tsx | 82 ++++++++++--------- .../components/Logs/LogRowContextProvider.tsx | 19 ++--- 2 files changed, 50 insertions(+), 51 deletions(-) diff --git a/packages/grafana-ui/src/components/Logs/LogRowContextProvider.test.tsx b/packages/grafana-ui/src/components/Logs/LogRowContextProvider.test.tsx index 57052cc015c..46650c9430f 100644 --- a/packages/grafana-ui/src/components/Logs/LogRowContextProvider.test.tsx +++ b/packages/grafana-ui/src/components/Logs/LogRowContextProvider.test.tsx @@ -34,7 +34,13 @@ describe('getRowContexts', () => { const result = await getRowContexts(getRowContextMock, row, 10); - expect(result).toEqual({ data: [[['3', '2']], [['6', '5', '4']]], errors: ['', ''] }); + expect(result).toEqual({ + data: [ + ['3', '2'], + ['6', '5', '4'], + ], + errors: ['', ''], + }); }); it('then the result should be in correct format and filtered without uid', async () => { @@ -63,7 +69,13 @@ describe('getRowContexts', () => { const result = await getRowContexts(getRowContextMock, row, 10); - expect(result).toEqual({ data: [[['3', '2', '1']], [['6', '5']]], errors: ['', ''] }); + expect(result).toEqual({ + data: [ + ['3', '2', '1'], + ['6', '5'], + ], + errors: ['', ''], + }); }); }); @@ -93,17 +105,17 @@ describe('LogRowContextProvider', () => { const firstResult = new MutableDataFrame({ refId: 'B', fields: [ - { name: 'ts', type: FieldType.time, values: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] }, + { name: 'ts', type: FieldType.time, values: [10, 9, 8, 7, 6, 5] }, { name: 'line', type: FieldType.string, - values: ['10', '9', '8', '7', '6', '5', '4', '3', '2', '1'], + values: ['10', '9', '8', '7', '6', '5'], labels: {}, }, { name: 'id', type: FieldType.string, - values: ['10', '9', '8', '7', '6', '5', '4', '3', '2', '1'], + values: ['10', '9', '8', '7', '6', '5'], labels: {}, }, ], @@ -126,42 +138,34 @@ describe('LogRowContextProvider', () => { } return Promise.resolve({ data: [secondResult] }); }; - let wrapper: any; + let updateLimitCalled = false; + + const mockedChildren = jest.fn((mockState: any) => { + const { result, errors, hasMoreContextRows, updateLimit, limit } = mockState; + if (!updateLimitCalled && result.before.length === 0) { + expect(result).toEqual({ before: [], after: [] }); + expect(errors).toEqual({ before: undefined, after: undefined }); + expect(hasMoreContextRows).toEqual({ before: true, after: true }); + expect(limit).toBe(10); + return <>; + } + if (!updateLimitCalled && result.before.length > 0) { + expect(result).toEqual({ before: ['10', '9', '8', '7', '6', '5'], after: ['14', '13', '12'] }); + expect(errors).toEqual({ before: '', after: '' }); + expect(hasMoreContextRows).toEqual({ before: true, after: true }); + expect(limit).toBe(10); + updateLimit(); + updateLimitCalled = true; + return <>; + } + if (updateLimitCalled && result.before.length > 0 && limit > 10) { + expect(limit).toBe(20); + } + return <>; + }); await act(async () => { - wrapper = await mount( - - {({ result, errors, hasMoreContextRows, updateLimit, limit }) => { - return ( -
-
-

{result.before?.toString()}

-

{result.after?.toString()}

-
-
-

{errors.before}

-

{errors.after}

-
-
-

{String(hasMoreContextRows.before)}

-

{String(hasMoreContextRows.after)}

-
-
{limit}
- -
- ); - }} -
- ); + await mount(); }); - expect(wrapper.find('.hasMoreContextRows-before').text()).toBe('true'); - expect(wrapper.find('.hasMoreContextRows-after').text()).toBe('true'); - expect(wrapper.find('.limit').text()).toBe('10'); - await act(async () => wrapper.find('.updateLimit').simulate('click')); - expect(wrapper.find('.limit').text()).toBe('20'); - expect(wrapper.find('.hasMoreContextRows-before').text()).toBe('true'); - expect(wrapper.find('.hasMoreContextRows-after').text()).toBe('false'); }); }); }); diff --git a/packages/grafana-ui/src/components/Logs/LogRowContextProvider.tsx b/packages/grafana-ui/src/components/Logs/LogRowContextProvider.tsx index 8991a9cbd74..00dc2298ca6 100644 --- a/packages/grafana-ui/src/components/Logs/LogRowContextProvider.tsx +++ b/packages/grafana-ui/src/components/Logs/LogRowContextProvider.tsx @@ -1,6 +1,5 @@ import { LogRowModel, toDataFrame, Field, FieldCache } from '@grafana/data'; import React, { useState, useEffect } from 'react'; -import flatten from 'lodash/flatten'; import useAsync from 'react-use/lib/useAsync'; import { DataQueryResponse, DataQueryError } from '@grafana/data'; @@ -101,11 +100,7 @@ export const getRowContexts = async ( const lineField: Field = dataFrame.fields.filter(field => field.name === 'line')[0]; const line = lineField.values.get(fieldIndex); // assuming that both fields have same length - if (data.length === 0) { - data[0] = [line]; - } else { - data[0].push(line); - } + data.push(line); } } @@ -161,10 +156,10 @@ export const LogRowContextProvider: React.FunctionComponent