From 272e659a5f3149abd35de666c04da070fa068e63 Mon Sep 17 00:00:00 2001 From: "Ricardo M." Date: Sat, 30 Mar 2024 00:36:40 -0400 Subject: [PATCH] fix(code): Use YAML 1.1 for serializing Currently, Kaoto serialize to YAML using YAML 1.2. This creates an edge for the Rest component since one of its parameters (`bindingMode`) accepts an `off` value which ultimately gets serialized as it is, causing to be interpreted as `false`. This commit change the YAML serializing schema to 1.1 so `off` gets serialized as `"off"` avoiding this issue. fix: https://github.com/KaotoIO/kaoto-next/issues/971 --- packages/ui/src/hooks/entities.test.tsx | 20 ++++++++++++++++-- packages/ui/src/hooks/entities.ts | 2 +- packages/ui/src/stubs/camel-route-yaml-1.1.ts | 21 +++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 packages/ui/src/stubs/camel-route-yaml-1.1.ts diff --git a/packages/ui/src/hooks/entities.test.tsx b/packages/ui/src/hooks/entities.test.tsx index 467f03e9d..62d7917ab 100644 --- a/packages/ui/src/hooks/entities.test.tsx +++ b/packages/ui/src/hooks/entities.test.tsx @@ -2,7 +2,8 @@ import { act, renderHook } from '@testing-library/react'; import { CamelResource, SourceSchemaType } from '../models/camel'; import { CamelRouteVisualEntity } from '../models/visualization/flows'; import { camelRouteJson, camelRouteYaml } from '../stubs/camel-route'; -import { EventNotifier } from '../utils'; +import { camelRouteYaml_1_1_original, camelRouteYaml_1_1_updated } from '../stubs/camel-route-yaml-1.1'; +import { EventNotifier, setValue } from '../utils'; import { useEntities } from './entities'; describe('useEntities', () => { @@ -42,9 +43,24 @@ describe('useEntities', () => { expect(result.current.visualEntities).toEqual([new CamelRouteVisualEntity(camelRouteJson.route)]); }); - it('should notifiy subscribers when the entities are updated', () => { + it('should serialize using YAML 1.1', () => { const notifierSpy = jest.spyOn(eventNotifier, 'next'); + const { result } = renderHook(() => useEntities()); + act(() => { + eventNotifier.next('code:updated', camelRouteYaml_1_1_original); + }); + + act(() => { + setValue(result.current.visualEntities[0], 'route.from.parameters.bindingMode', 'off'); + result.current.updateSourceCodeFromEntities(); + }); + + expect(notifierSpy).toHaveBeenCalledWith('entities:updated', camelRouteYaml_1_1_updated); + }); + + it('should notifiy subscribers when the entities are updated', () => { + const notifierSpy = jest.spyOn(eventNotifier, 'next'); const { result } = renderHook(() => useEntities()); act(() => { diff --git a/packages/ui/src/hooks/entities.ts b/packages/ui/src/hooks/entities.ts index 6df1ab6ce..bdd991aa0 100644 --- a/packages/ui/src/hooks/entities.ts +++ b/packages/ui/src/hooks/entities.ts @@ -57,7 +57,7 @@ export const useEntities = (): EntitiesContextResult => { }, [eventNotifier]); const updateSourceCodeFromEntities = useCallback(() => { - const code = stringify(camelResource, { sortMapEntries: camelResource.sortFn }) || ''; + const code = stringify(camelResource, { sortMapEntries: camelResource.sortFn, schema: 'yaml-1.1' }) || ''; eventNotifier.next('entities:updated', code); }, [camelResource, eventNotifier]); diff --git a/packages/ui/src/stubs/camel-route-yaml-1.1.ts b/packages/ui/src/stubs/camel-route-yaml-1.1.ts new file mode 100644 index 000000000..e10a26990 --- /dev/null +++ b/packages/ui/src/stubs/camel-route-yaml-1.1.ts @@ -0,0 +1,21 @@ +export const camelRouteYaml_1_1_original = ` +- route: + id: route-3376 + from: + id: from-3505 + uri: rest:post:/newCustomer + parameters: + host: localhost + steps: [] +`; + +export const camelRouteYaml_1_1_updated = `- route: + id: route-3376 + from: + id: from-3505 + uri: rest:post:/newCustomer + parameters: + bindingMode: "off" + host: localhost + steps: [] +`;