diff --git a/lib/services/schema-normalizer.service.spec.ts b/lib/services/schema-normalizer.service.spec.ts index 3fdc9927..7ca23d47 100644 --- a/lib/services/schema-normalizer.service.spec.ts +++ b/lib/services/schema-normalizer.service.spec.ts @@ -93,9 +93,23 @@ describe('Spec Helper', () => { expect(resolved.items.$ref).toBeUndefined(); resolved.type.should.be.equal('array'); resolved._pointer.should.be.equal('#/definitions/Circular'); + }); + + it('should remove _pointer when detect circularity', () => { expect(resolved.items._pointer).toBeUndefined(); resolved.items.title.should.be.equal('Circular'); }); + + it('should resolve transitive circular ref', () => { + let pointer = '/paths/test6/get/parameters/0'; + resolved = normalizer.normalize(specMgr.byPointer(pointer), pointer); + expect(resolved.additionalProperties.$ref).toBeUndefined(); + expect(resolved.additionalProperties.items.additionalProperties.$ref).toBeUndefined(); + resolved.additionalProperties.type.should.be.equal('array'); + resolved.additionalProperties._pointer.should.be.equal('#/definitions/CircularTransitive2'); + expect(resolved.additionalProperties.items.additionalProperties._pointer).toBeUndefined(); + resolved.additionalProperties.items.additionalProperties.title.should.be.equal('CircularTransitive'); + }); }); describe('$ref with other fields on the same level', () => { diff --git a/tests/schemas/base-component-dereference.json b/tests/schemas/base-component-dereference.json index fa39300b..df5dcebc 100644 --- a/tests/schemas/base-component-dereference.json +++ b/tests/schemas/base-component-dereference.json @@ -35,6 +35,20 @@ "items": { "$ref": "#/definitions/Circular" } + }, + "CircularTransitive": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/CircularTransitive2" + } + }, + "CircularTransitive2": { + "type": "array", + "items": { + "additionalProperties": { + "$ref": "#/definitions/CircularTransitive" + } + } } }, "paths": { @@ -89,6 +103,18 @@ } ] } + }, + "test6": { + "get": { + "summary": "test get", + "parameters": [ + { + "$ref": "#/definitions/CircularTransitive", + "title": "test", + "description": "test" + } + ] + } } } }