From 29c22f13cfe7826304c64ec0c4021bab073a661d Mon Sep 17 00:00:00 2001 From: kartikayy007 Date: Wed, 5 Nov 2025 00:43:38 +0530 Subject: [PATCH 1/6] fix: correct resolver configuration merge in ValidationService Fixes #1839 --- src/domains/services/validation.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/domains/services/validation.service.ts b/src/domains/services/validation.service.ts index a2fcc4e34ca..1d0dffcf83d 100644 --- a/src/domains/services/validation.service.ts +++ b/src/domains/services/validation.service.ts @@ -184,14 +184,15 @@ export class ValidationService extends BaseService { const customParserOptions = { ...parserOptions, __unstable: { + ...parserOptions.__unstable, resolver: { + ...parserOptions.__unstable?.resolver, cache: false, resolvers: [ createHttpWithAuthResolver(), ...(parserOptions.__unstable?.resolver?.resolvers || []) ], }, - ...parserOptions.__unstable?.resolver, }, }; From e56131c9cd48fdf1d3a636ed7b5ac2e88743b252 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 4 Nov 2025 19:39:34 +0000 Subject: [PATCH 2/6] chore: add changeset for PR #1891 --- .changeset/1891.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changeset/1891.md diff --git a/.changeset/1891.md b/.changeset/1891.md new file mode 100644 index 00000000000..71f299c1fbd --- /dev/null +++ b/.changeset/1891.md @@ -0,0 +1,11 @@ +--- +'@asyncapi/cli': patch +--- + +fix: correct resolver configuration merge in ValidationService + +- 29c22f1: fix: correct resolver configuration merge in ValidationService + +Fixes #1839 + + From b4529e5b0c415b5334f8b5e4ad512e31a18c6112 Mon Sep 17 00:00:00 2001 From: kartikayy007 Date: Wed, 5 Nov 2025 19:03:48 +0530 Subject: [PATCH 3/6] test: add regression test for resolver config merge bug --- test/unit/services/validation.service.test.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/test/unit/services/validation.service.test.ts b/test/unit/services/validation.service.test.ts index de65f166d2d..d8211cddd48 100644 --- a/test/unit/services/validation.service.test.ts +++ b/test/unit/services/validation.service.test.ts @@ -251,4 +251,40 @@ describe('ValidationService', () => { } }); }); + + describe('validateDocument() with parserOptions (regression test for resolver config merge bug)', () => { + it('should preserve custom resolvers when parserOptions with empty resolvers are passed', async () => { + const simpleAsyncAPI = `{ + "asyncapi": "2.6.0", + "info": { + "title": "Test Resolver Config", + "version": "1.0.0" + }, + "channels": {} + }`; + + const specFile = new Specification(simpleAsyncAPI); + + const parserOptions = { + __unstable: { + resolver: { + resolvers: [] + } + } + }; + + const validationServiceWithOptions = new ValidationService(parserOptions); + + const result = await validationServiceWithOptions.validateDocument(specFile, { + 'diagnostics-format': 'stylish' as const + }); + + expect(result.success).to.equal(true); + if (result.success) { + expect(result.data).to.have.property('status'); + expect(result.data?.status).to.equal('valid'); + expect(result.data).to.have.property('diagnostics'); + } + }); + }); }); From ffcb08bcac9cf0869cd67b1927efc79a48eeb120 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 5 Nov 2025 13:42:19 +0000 Subject: [PATCH 4/6] chore: add changeset for PR #1891 --- .changeset/1891.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/1891.md b/.changeset/1891.md index 71f299c1fbd..4278f20f892 100644 --- a/.changeset/1891.md +++ b/.changeset/1891.md @@ -7,5 +7,6 @@ fix: correct resolver configuration merge in ValidationService - 29c22f1: fix: correct resolver configuration merge in ValidationService Fixes #1839 +- b4529e5: test: add regression test for resolver config merge bug From 824604972c58e74832badd4027d4597a7aa38a3a Mon Sep 17 00:00:00 2001 From: kartikayy007 Date: Fri, 7 Nov 2025 23:52:35 +0530 Subject: [PATCH 5/6] test: add integration test for external file reference resolution --- test/fixtures/external-refs/main.yaml | 11 ++++++ test/fixtures/external-refs/schemas.yaml | 20 +++++++++++ test/integration/validate.test.ts | 10 ++++++ test/unit/services/validation.service.test.ts | 36 ------------------- 4 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 test/fixtures/external-refs/main.yaml create mode 100644 test/fixtures/external-refs/schemas.yaml diff --git a/test/fixtures/external-refs/main.yaml b/test/fixtures/external-refs/main.yaml new file mode 100644 index 00000000000..50dd2c0aff1 --- /dev/null +++ b/test/fixtures/external-refs/main.yaml @@ -0,0 +1,11 @@ +asyncapi: "2.6.0" +info: + title: Service with External Refs + version: 1.0.0 + description: AsyncAPI document with external file references in same directory +channels: + user/created: + subscribe: + message: + payload: + $ref: "./schemas.yaml#/components/schemas/UserSchema" diff --git a/test/fixtures/external-refs/schemas.yaml b/test/fixtures/external-refs/schemas.yaml new file mode 100644 index 00000000000..a0ebadb6492 --- /dev/null +++ b/test/fixtures/external-refs/schemas.yaml @@ -0,0 +1,20 @@ +components: + schemas: + UserSchema: + type: object + properties: + id: + type: string + format: uuid + description: User ID + name: + type: string + description: User name + email: + type: string + format: email + description: User email + required: + - id + - name + - email diff --git a/test/integration/validate.test.ts b/test/integration/validate.test.ts index 0f72924b5d0..5cb3f004168 100644 --- a/test/integration/validate.test.ts +++ b/test/integration/validate.test.ts @@ -84,6 +84,16 @@ describe('validate', () => { expect(ctx.stderr).to.equal(''); done(); }); + + test + .stderr() + .stdout() + .command(['validate', './test/fixtures/external-refs/main.yaml']) + .it('should resolve external file references in same directory', (ctx, done) => { + expect(ctx.stdout).to.include('File ./test/fixtures/external-refs/main.yaml is valid'); + expect(ctx.stderr).to.equal(''); + done(); + }); }); describe('with context names', () => { diff --git a/test/unit/services/validation.service.test.ts b/test/unit/services/validation.service.test.ts index d8211cddd48..de65f166d2d 100644 --- a/test/unit/services/validation.service.test.ts +++ b/test/unit/services/validation.service.test.ts @@ -251,40 +251,4 @@ describe('ValidationService', () => { } }); }); - - describe('validateDocument() with parserOptions (regression test for resolver config merge bug)', () => { - it('should preserve custom resolvers when parserOptions with empty resolvers are passed', async () => { - const simpleAsyncAPI = `{ - "asyncapi": "2.6.0", - "info": { - "title": "Test Resolver Config", - "version": "1.0.0" - }, - "channels": {} - }`; - - const specFile = new Specification(simpleAsyncAPI); - - const parserOptions = { - __unstable: { - resolver: { - resolvers: [] - } - } - }; - - const validationServiceWithOptions = new ValidationService(parserOptions); - - const result = await validationServiceWithOptions.validateDocument(specFile, { - 'diagnostics-format': 'stylish' as const - }); - - expect(result.success).to.equal(true); - if (result.success) { - expect(result.data).to.have.property('status'); - expect(result.data?.status).to.equal('valid'); - expect(result.data).to.have.property('diagnostics'); - } - }); - }); }); From 7f8ad5e0026c6e727fc57a2a9f41796e4c3bb28c Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Fri, 7 Nov 2025 18:28:14 +0000 Subject: [PATCH 6/6] chore: add changeset for PR #1891 --- .changeset/1891.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/1891.md b/.changeset/1891.md index 4278f20f892..5ffaa3e9425 100644 --- a/.changeset/1891.md +++ b/.changeset/1891.md @@ -8,5 +8,6 @@ fix: correct resolver configuration merge in ValidationService Fixes #1839 - b4529e5: test: add regression test for resolver config merge bug +- 8246049: test: add integration test for external file reference resolution