zammad/zammad

View on GitHub
app/frontend/shared/form/core/__tests__/initializeFieldDefinition.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
// Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

import {
  text as inputTextDefinition,
  select as selectDefinition,
  casts,
} from '@formkit/inputs'
import { cloneDeep } from 'lodash-es'

import initializeFieldDefinition from '#shared/form/core/initializeFieldDefinition.ts'
import addBlurEvent from '#shared/form/features/addBlurEvent.ts'
import formLocaleDir from '#shared/form/features/formLocaleDir.ts'
import hideField from '#shared/form/features/hideField.ts'
import translateWrapperProps from '#shared/form/features/translateWrapperProps.ts'

describe('initializeFieldDefinition', () => {
  it('check for added default props without already existing props', () => {
    const definition = cloneDeep(inputTextDefinition)
    initializeFieldDefinition(definition)

    expect(definition.props).toEqual([
      'formId',
      'labelSrOnly',
      'labelPlaceholder',
      'internal',
    ])
  })

  it('check for added default props with existing props', () => {
    const definition = cloneDeep(selectDefinition)
    initializeFieldDefinition(definition)

    expect(definition.props).toEqual([
      ...(Array.isArray(selectDefinition.props) ? selectDefinition.props : []),
      'formId',
      'labelSrOnly',
      'labelPlaceholder',
      'internal',
    ])
  })

  it('check for added default features without already existing features', () => {
    const definition = cloneDeep(inputTextDefinition)
    initializeFieldDefinition(definition)

    expect(definition.features).toEqual([
      translateWrapperProps,
      hideField,
      addBlurEvent,
      formLocaleDir,
      casts,
    ])
  })

  it('check for added default features with existing features', () => {
    const definition = cloneDeep(selectDefinition)
    initializeFieldDefinition(definition)

    expect(definition.features).toEqual([
      translateWrapperProps,
      hideField,
      addBlurEvent,
      formLocaleDir,
      ...(selectDefinition.features || []),
    ])
  })

  it('do not add default props', () => {
    const definition = cloneDeep(inputTextDefinition)
    initializeFieldDefinition(definition, {}, { addDefaultProps: false })

    expect(definition.props).toEqual([])
  })

  it('do not add default features', () => {
    const definition = cloneDeep(inputTextDefinition)
    initializeFieldDefinition(
      definition,
      {},
      { addDefaultProps: true, addDefaultFeatures: false },
    )

    expect(definition.features).toEqual([casts])
  })

  it('add additional props and features', () => {
    const featureExample = vi.fn()

    const definition = cloneDeep(inputTextDefinition)
    initializeFieldDefinition(definition, {
      props: ['example'],
      features: [featureExample],
    })

    expect(definition.props).toEqual([
      'formId',
      'labelSrOnly',
      'labelPlaceholder',
      'internal',
      'example',
    ])
    expect(definition.features).toEqual([
      translateWrapperProps,
      hideField,
      addBlurEvent,
      formLocaleDir,
      featureExample,
      casts,
    ])
  })
})