All files / modules/85-cv/pages/health-source/connectors/SplunkHealthSource/components/MapQueriesToHarnessService utils.ts

100% Statements 19/19
88% Branches 44/50
100% Functions 3/3
100% Lines 19/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80                  25x                   25x           3x     3x 2x       3x 3x       3x 3x   3x     25x           5x                           5x 4x 3x   1x     5x 1x         5x    
/*
 * Copyright 2021 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import type { FormikProps } from 'formik'
import type { UseStringsReturn } from 'framework/strings'
import { initialFormData, MapSplunkToServiceFieldNames } from './constants'
import type { MapSplunkQueryToService } from './types'
 
type UpdateSelectedQueriesMap = {
  updatedMetric: string
  oldMetric: string
  mappedMetrics: Map<string, MapSplunkQueryToService>
  formikProps: FormikProps<MapSplunkQueryToService | undefined>
}
 
export function updateSelectedMetricsMap({
  updatedMetric,
  oldMetric,
  mappedMetrics,
  formikProps
}: UpdateSelectedQueriesMap): any {
  const updatedMap = new Map(mappedMetrics)
 
  // in the case where user updates query name, update the key for current value
  if (oldMetric !== formikProps.values?.metricName) {
    updatedMap.delete(oldMetric)
  }
 
  // if newly created query create form object
  Eif (!updatedMap.has(updatedMetric)) {
    updatedMap.set(updatedMetric, { ...initialFormData, metricName: updatedMetric })
  }
 
  // update map with current form data
  Eif (formikProps.values?.metricName) {
    updatedMap.set(formikProps.values.metricName, formikProps.values as MapSplunkQueryToService)
  }
  return { selectedMetric: updatedMetric, mappedMetrics: updatedMap }
}
 
export function validateMappings(
  getString: UseStringsReturn['getString'],
  createdMetrics: string[],
  selectedMetricIndex: number,
  values?: MapSplunkQueryToService
): { [fieldName: string]: string } {
  const requiredFieldErrors = {
    ...(!values?.metricName && {
      [MapSplunkToServiceFieldNames.METRIC_NAME]: getString('cv.monitoringSources.queryNameValidation')
    }),
    ...(!values?.query && {
      [MapSplunkToServiceFieldNames.QUERY]: getString('cv.monitoringSources.gco.manualInputQueryModal.validation.query')
    }),
    ...(!values?.serviceInstance && {
      [MapSplunkToServiceFieldNames.SERVICE_INSTANCE]: getString(
        'cv.monitoringSources.gcoLogs.validation.serviceInstance'
      )
    })
  }
 
  const duplicateNames = createdMetrics?.filter((metricName, index) => {
    if (index === selectedMetricIndex) {
      return false
    }
    return metricName === values?.metricName
  })
 
  if (values?.metricName && duplicateNames.length) {
    requiredFieldErrors[MapSplunkToServiceFieldNames.METRIC_NAME] = getString(
      'cv.monitoringSources.gcoLogs.validation.queryNameUnique'
    )
  }
 
  return requiredFieldErrors
}