form-model-v2.test.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { beforeEach, describe, expect, it, vi } from 'vitest';
  6. import { FlowNodeEntity } from '@flowgram.ai/document';
  7. import { FormMeta } from '../src/types';
  8. import { FormModelV2 } from '../src/form-model-v2';
  9. describe('FormModelV2', () => {
  10. const node = {
  11. getService: vi.fn().mockReturnValue({}),
  12. getData: vi.fn().mockReturnValue({ fireChange: vi.fn() }),
  13. } as unknown as FlowNodeEntity;
  14. let formModelV2 = new FormModelV2(node);
  15. beforeEach(() => {
  16. formModelV2.dispose();
  17. formModelV2 = new FormModelV2(node);
  18. });
  19. describe('v1 apis', () => {
  20. it('getFormItemValueByPath', () => {
  21. const formMeta = {
  22. render: vi.fn(),
  23. };
  24. formModelV2.init(formMeta, {
  25. a: 1,
  26. b: 2,
  27. });
  28. expect(formModelV2.getFormItemValueByPath('/a')).toBe(1);
  29. expect(formModelV2.getFormItemValueByPath('/b')).toBe(2);
  30. expect(formModelV2.getFormItemValueByPath('/')).toEqual({ a: 1, b: 2 });
  31. });
  32. it('getFormItemByPath when path is /', () => {
  33. const formMeta = {
  34. render: vi.fn(),
  35. };
  36. formModelV2.init(formMeta, {
  37. a: 1,
  38. b: 2,
  39. });
  40. const formItem = formModelV2.getFormItemByPath('/');
  41. expect(formItem?.value).toEqual({
  42. a: 1,
  43. b: 2,
  44. });
  45. formItem!.value = { a: 3, b: 4 };
  46. expect(formItem?.value).toEqual({
  47. a: 3,
  48. b: 4,
  49. });
  50. });
  51. });
  52. describe('onFormValueChangeIn', () => {
  53. beforeEach(() => {
  54. formModelV2.dispose();
  55. formModelV2 = new FormModelV2(node);
  56. });
  57. it('should trigger callback when value change', () => {
  58. const mockCallback = vi.fn();
  59. const formMeta = {
  60. render: vi.fn(),
  61. } as unknown as FormMeta;
  62. formModelV2.init(formMeta, { a: 1 });
  63. formModelV2.onFormValueChangeIn('a', mockCallback);
  64. formModelV2.setValueIn('a', 2);
  65. expect(mockCallback).toHaveBeenCalledOnce();
  66. });
  67. it('should throw error when formModel is not initialized', () => {
  68. expect(() => formModelV2.onFormValueChangeIn('a', vi.fn())).toThrowError();
  69. });
  70. });
  71. });