From 2d84bdcaa7234c8c933f68e30df00ab29a791ab9 Mon Sep 17 00:00:00 2001 From: Roman Sergeenko Date: Thu, 20 Apr 2023 12:27:38 +0200 Subject: [PATCH] #RI-4428 - update telemetry events #RI-4417 - clear state after start again --- .../bulk-actions/BulkActions.spec.tsx | 2 +- .../components/bulk-actions/BulkActions.tsx | 9 +-- .../BulkActionsTabs/BulkActionsTabs.spec.tsx | 57 ++++++++++++++++++- .../BulkActionsTabs/BulkActionsTabs.tsx | 24 +++++--- .../bulk-actions/BulkUpload/BulkUpload.tsx | 1 + .../components/key-list/KeyList.spec.tsx | 4 +- redisinsight/ui/src/telemetry/events.ts | 2 - 7 files changed, 80 insertions(+), 19 deletions(-) diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.spec.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.spec.tsx index 6af517622a..55625efb01 100644 --- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.spec.tsx +++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.spec.tsx @@ -153,7 +153,7 @@ describe('BulkActions', () => { eventData: { databaseId: 'instanceId', action: BulkActionsType.Delete, - search: '', + match: '*', filterType: 'hash' } }) diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.tsx index 5300aa21d0..a6f8cfeb8a 100644 --- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.tsx +++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActions.tsx @@ -18,6 +18,7 @@ import { import { BulkActionsType } from 'uiSrc/constants' import { keysSelector } from 'uiSrc/slices/browser/keys' import { getMatchType, sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' +import { DEFAULT_SEARCH_MATCH } from 'uiSrc/constants/api' import BulkUpload from './BulkUpload' import BulkDelete from './BulkDelete' @@ -41,16 +42,12 @@ const BulkActions = (props: Props) => { const dispatch = useDispatch() useEffect(() => { - let matchValue = '*' - if (search !== '*' && !!search) { - matchValue = getMatchType(search) - } sendEventTelemetry({ event: TelemetryEvent.BULK_ACTIONS_OPENED, eventData: { databaseId: instanceId, filterType: filter, - match: matchValue, + match: (search && search !== DEFAULT_SEARCH_MATCH) ? getMatchType(search) : DEFAULT_SEARCH_MATCH, } }) }, []) @@ -71,7 +68,7 @@ const BulkActions = (props: Props) => { } if (type === BulkActionsType.Delete) { - eventData.search = search + eventData.match = (search && search !== DEFAULT_SEARCH_MATCH) ? getMatchType(search) : DEFAULT_SEARCH_MATCH eventData.filterType = filter } diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.spec.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.spec.tsx index c311269238..b35b9114b8 100644 --- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.spec.tsx +++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.spec.tsx @@ -1,15 +1,70 @@ import React from 'react' import { mock } from 'ts-mockito' -import { render } from 'uiSrc/utils/test-utils' +import { fireEvent, render, screen } from 'uiSrc/utils/test-utils' +import { BulkActionsType } from 'uiSrc/constants' +import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' import BulkActionsTabs, { Props } from './BulkActionsTabs' const mockedProps = { ...mock(), } +jest.mock('uiSrc/telemetry', () => ({ + ...jest.requireActual('uiSrc/telemetry'), + sendEventTelemetry: jest.fn(), +})) + +jest.mock('uiSrc/slices/browser/bulkActions', () => ({ + ...jest.requireActual('uiSrc/slices/browser/bulkActions'), + selectedBulkActionsSelector: jest.fn().mockReturnValue({ + type: 'delete' + }), +})) + +jest.mock('uiSrc/slices/browser/keys', () => ({ + ...jest.requireActual('uiSrc/slices/browser/keys'), + keysSelector: jest.fn().mockReturnValue({ + filter: 'set', + search: 'dawkmdk*' + }), +})) + describe('BulkActionsTabs', () => { it('should render', () => { expect(render()).toBeTruthy() }) + + it('should call proper telemetry events', async () => { + const sendEventTelemetryMock = jest.fn(); + (sendEventTelemetry as jest.Mock).mockImplementation(() => sendEventTelemetryMock) + + render() + + fireEvent.click(screen.getByTestId('bulk-action-tab-upload')) + + expect(sendEventTelemetry).toBeCalledWith({ + event: TelemetryEvent.BULK_ACTIONS_OPENED, + eventData: { + databaseId: '', + action: BulkActionsType.Upload, + } + }); + + (sendEventTelemetry as jest.Mock).mockRestore() + + fireEvent.click(screen.getByTestId('bulk-action-tab-delete')) + + expect(sendEventTelemetry).toBeCalledWith({ + event: TelemetryEvent.BULK_ACTIONS_OPENED, + eventData: { + databaseId: '', + action: BulkActionsType.Delete, + match: 'PATTERN', + filterType: 'set' + } + }); + + (sendEventTelemetry as jest.Mock).mockRestore() + }) }) diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.tsx index 79346a51f6..0096ee39fa 100644 --- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.tsx +++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkActionsTabs/BulkActionsTabs.tsx @@ -5,8 +5,11 @@ import { useSelector } from 'react-redux' import { BulkActionsType } from 'uiSrc/constants' import { selectedBulkActionsSelector } from 'uiSrc/slices/browser/bulkActions' -import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' +import { getMatchType, sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances' +import { DEFAULT_SEARCH_MATCH } from 'uiSrc/constants/api' +import { keysSelector } from 'uiSrc/slices/browser/keys' + import { bulkActionsTypeTabs } from '../constants/bulk-type-options' import styles from './styles.module.scss' @@ -17,16 +20,23 @@ export interface Props { const BulkActionsTabs = (props: Props) => { const { onChangeType } = props const { id: instanceId } = useSelector(connectedInstanceSelector) + const { filter, search } = useSelector(keysSelector) const { type } = useSelector(selectedBulkActionsSelector) const onSelectedTabChanged = (id: BulkActionsType) => { + const eventData: Record = { + databaseId: instanceId, + action: id + } + + if (id === BulkActionsType.Delete) { + eventData.match = (search && search !== DEFAULT_SEARCH_MATCH) ? getMatchType(search) : DEFAULT_SEARCH_MATCH + eventData.filterType = filter + } + sendEventTelemetry({ - event: TelemetryEvent.BULK_ACTIONS_SWITCHED, - eventData: { - databaseId: instanceId, - prevValue: type, - currentValue: id - } + event: TelemetryEvent.BULK_ACTIONS_OPENED, + eventData }) onChangeType(id) } diff --git a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkUpload/BulkUpload.tsx b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkUpload/BulkUpload.tsx index 48c2b8822a..275144f225 100644 --- a/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkUpload/BulkUpload.tsx +++ b/redisinsight/ui/src/pages/browser/components/bulk-actions/BulkUpload/BulkUpload.tsx @@ -56,6 +56,7 @@ const BulkUpload = (props: Props) => { const onStartAgain = () => { dispatch(setBulkUploadStartAgain()) setFiles(null) + setIsSubmitDisabled(true) } const handleUploadWarning = () => { diff --git a/redisinsight/ui/src/pages/browser/components/key-list/KeyList.spec.tsx b/redisinsight/ui/src/pages/browser/components/key-list/KeyList.spec.tsx index c09cfc41ce..598131120b 100644 --- a/redisinsight/ui/src/pages/browser/components/key-list/KeyList.spec.tsx +++ b/redisinsight/ui/src/pages/browser/components/key-list/KeyList.spec.tsx @@ -3,7 +3,7 @@ import { cloneDeep } from 'lodash' import { fireEvent } from '@testing-library/react' import { cleanup, mockedStore, render, waitFor, screen, clearStoreActions } from 'uiSrc/utils/test-utils' import { KeysStoreData, KeyViewType, SearchMode } from 'uiSrc/slices/interfaces/keys' -import { deleteSelectedKey, keysSelector, setLastBatchKeys } from 'uiSrc/slices/browser/keys' +import { deleteKey, keysSelector, setLastBatchKeys } from 'uiSrc/slices/browser/keys' import { apiService } from 'uiSrc/services' import KeyList from './KeyList' @@ -196,7 +196,7 @@ describe('KeyList', () => { fireEvent.click(screen.getByTestId('submit-delete-key')) const expectedActions = [ - deleteSelectedKey() + deleteKey() ] expect(clearStoreActions(store.getActions().slice(-1))).toEqual(clearStoreActions(expectedActions)) }) diff --git a/redisinsight/ui/src/telemetry/events.ts b/redisinsight/ui/src/telemetry/events.ts index 2fc6614096..f7a2112e15 100644 --- a/redisinsight/ui/src/telemetry/events.ts +++ b/redisinsight/ui/src/telemetry/events.ts @@ -198,8 +198,6 @@ export enum TelemetryEvent { BULK_ACTIONS_WARNING = 'BULK_ACTIONS_WARNING', BULK_ACTIONS_CANCELLED = 'BULK_ACTIONS_CANCELLED', BULK_ACTIONS_STARTED = 'BULK_ACTIONS_STARTED', - BULK_ACTIONS_STOPPED = 'BULK_ACTIONS_STOPPED', - BULK_ACTIONS_SWITCHED = 'BULK_ACTIONS_SWITCHED', DATABASE_ANALYSIS_STARTED = 'DATABASE_ANALYSIS_STARTED', DATABASE_ANALYSIS_HISTORY_VIEWED = 'DATABASE_ANALYSIS_HISTORY_VIEWED',