requiredValidation.spec.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. import type { FormKitFrameworkContext } from '@formkit/core'
  3. import { createNode } from '@formkit/core'
  4. import requiredValidation from '../global/requiredValidation'
  5. const createInput = (props: any = {}) => {
  6. const originalSchema = vi.fn()
  7. const inputNode = createNode({
  8. type: 'input',
  9. value: 'Test node',
  10. props: {
  11. definition: { type: 'input', schema: originalSchema },
  12. ...props,
  13. },
  14. })
  15. inputNode.context = {
  16. fns: {},
  17. } as FormKitFrameworkContext
  18. return inputNode
  19. }
  20. describe('requiredValidation', () => {
  21. it('doesnt add validation rule', () => {
  22. const inputNode = createInput({})
  23. requiredValidation(inputNode)
  24. expect(inputNode.props.validation).not.toBe('required')
  25. })
  26. it('adds validation rule', () => {
  27. const inputNode = createInput({
  28. required: true,
  29. })
  30. requiredValidation(inputNode)
  31. expect(inputNode.props.validation).toBe('required')
  32. })
  33. it('appends validation rule to string', () => {
  34. const inputNode = createInput({
  35. required: true,
  36. validation: 'number',
  37. })
  38. requiredValidation(inputNode)
  39. expect(inputNode.props.validation).toBe('number|required')
  40. })
  41. it('appends validation rule to array', () => {
  42. const inputNode = createInput({
  43. required: true,
  44. validation: [['number']],
  45. })
  46. requiredValidation(inputNode)
  47. expect(inputNode.props.validation).toEqual([['number'], ['required']])
  48. })
  49. it('required prop removed from input', () => {
  50. const inputNode = createInput({
  51. required: true,
  52. validation: [['number']],
  53. })
  54. requiredValidation(inputNode)
  55. inputNode.emit('prop:required', false)
  56. expect(inputNode.props.validation).toEqual([['number']])
  57. })
  58. it('required prop removed from string', () => {
  59. const inputNode = createInput({
  60. required: true,
  61. validation: 'number',
  62. })
  63. requiredValidation(inputNode)
  64. inputNode.emit('prop:required', false)
  65. expect(inputNode.props.validation).toBe('number')
  66. })
  67. })