From 3587dbf105f3e16516a5fc5ce01ec2acaf3fbe3a Mon Sep 17 00:00:00 2001 From: Giuseppe Ciotola <30926550+gciotola@users.noreply.github.com> Date: Mon, 3 Aug 2026 11:15:09 +0200 Subject: [PATCH] fix: mock rules JSON schema in tests and cancel state update on unmount --- .../app-elements/src/mocks/data/core_schemas.ts | 16 ++++++++++++++++ packages/app-elements/src/mocks/handlers.ts | 2 ++ packages/app-elements/src/mocks/setup.ts | 7 ------- .../ui/forms/RuleEngine/RuleEngineComponent.tsx | 12 +++++++++++- 4 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 packages/app-elements/src/mocks/data/core_schemas.ts diff --git a/packages/app-elements/src/mocks/data/core_schemas.ts b/packages/app-elements/src/mocks/data/core_schemas.ts new file mode 100644 index 000000000..2febf96b9 --- /dev/null +++ b/packages/app-elements/src/mocks/data/core_schemas.ts @@ -0,0 +1,16 @@ +import { HttpResponse, http } from "msw" + +import orderRulesJsonSchema from "#ui/forms/RuleEngine/json_schema/order_rules.json" +import priceRulesJsonSchema from "#ui/forms/RuleEngine/json_schema/price_rules.json" + +const orderRulesSchema = http.get( + `https://core.commercelayer.*/api/public/schemas/order_rules`, + async () => HttpResponse.json(orderRulesJsonSchema), +) + +const priceRulesSchema = http.get( + `https://core.commercelayer.*/api/public/schemas/price_rules`, + async () => HttpResponse.json(priceRulesJsonSchema), +) + +export default [orderRulesSchema, priceRulesSchema] diff --git a/packages/app-elements/src/mocks/handlers.ts b/packages/app-elements/src/mocks/handlers.ts index 9554d34f0..8e5367c87 100644 --- a/packages/app-elements/src/mocks/handlers.ts +++ b/packages/app-elements/src/mocks/handlers.ts @@ -1,6 +1,7 @@ import { HttpResponse, http } from "msw" import corePublicResources from "./data/core_resources" +import coreSchemas from "./data/core_schemas" import countries from "./data/countries" import customers from "./data/customers" import markets from "./data/markets" @@ -107,6 +108,7 @@ export const handlers = [ }), ...corePublicResources, + ...coreSchemas, ...customers, ...countries, ...markets, diff --git a/packages/app-elements/src/mocks/setup.ts b/packages/app-elements/src/mocks/setup.ts index 6c3910546..1bb8d10f0 100644 --- a/packages/app-elements/src/mocks/setup.ts +++ b/packages/app-elements/src/mocks/setup.ts @@ -10,13 +10,6 @@ beforeAll(() => { return } - if ( - url.href === - "https://core.commercelayer.io/api/public/schemas/order_rules" - ) { - return - } - // Otherwise, print a warning for any unhandled request. print.error() }, diff --git a/packages/app-elements/src/ui/forms/RuleEngine/RuleEngineComponent.tsx b/packages/app-elements/src/ui/forms/RuleEngine/RuleEngineComponent.tsx index f63a7c8be..998e119a4 100644 --- a/packages/app-elements/src/ui/forms/RuleEngine/RuleEngineComponent.tsx +++ b/packages/app-elements/src/ui/forms/RuleEngine/RuleEngineComponent.tsx @@ -93,13 +93,23 @@ export function RuleEngine(props: RuleEngineProps): React.JSX.Element { useEffect( function parseSchema() { - fetchJsonSchema(props.schemaType, domain).then((jsonSchema) => { + let cancelled = false + + void fetchJsonSchema(props.schemaType, domain).then((jsonSchema) => { + if (cancelled) { + return + } + const parsedOptionsConfig = parseOptionsFromSchema( jsonSchema as any, props.schemaType, ) setOptionsConfig(parsedOptionsConfig) }) + + return () => { + cancelled = true + } }, [domain], )