diff --git a/lib/components/ResponsesList/responses-list.spec.ts b/lib/components/ResponsesList/responses-list.spec.ts new file mode 100644 index 00000000..9cec70f2 --- /dev/null +++ b/lib/components/ResponsesList/responses-list.spec.ts @@ -0,0 +1,57 @@ +'use strict'; + +import { Component } from '@angular/core'; +import { + inject, + async, + TestBed, + ComponentFixture +} from '@angular/core/testing'; + +import { getChildDebugElement } from '../../../tests/helpers'; + + +import { ResponsesList } from './responses-list'; +import { SpecManager } from '../../utils/spec-manager'; + +describe('Redoc components', () => { + + describe('MethodsList Component', () => { + let builder; + let component: ResponsesList; + let fixture: ComponentFixture + let specMgr; + + beforeEach(async(inject([SpecManager], (_specMgr) => { + specMgr = _specMgr; + }))); + + beforeEach(done => { + specMgr.load('/tests/schemas/responses-list-component.json').then(done, done.fail); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ResponsesList); + component = fixture.componentInstance; + }); + + it('should instantiate without errors', () => { + should.exist(component); + }); + + it('should init repsonses list', () => { + component.pointer = '#/paths/~1test1/get/responses'; + fixture.detectChanges(); + should.exist(component.responses); + component.responses.should.be.lengthOf(2); + }); + + it('should not overwrite codes for shared schemas', () => { + component.pointer = '#/paths/~1test1/get/responses'; + fixture.detectChanges(); + let resp1 = component.responses[0]; + let resp2 = component.responses[1]; + resp1.code.should.not.be.equal(resp2.code); + }); + }); +}); diff --git a/lib/components/ResponsesList/responses-list.ts b/lib/components/ResponsesList/responses-list.ts index f7744041..83fe2e0e 100644 --- a/lib/components/ResponsesList/responses-list.ts +++ b/lib/components/ResponsesList/responses-list.ts @@ -42,7 +42,7 @@ export class ResponsesList extends BaseComponent implements OnInit { resp.pointer = JsonPointer.join(this.pointer, respCode); if (resp.$ref) { let ref = resp.$ref; - resp = this.specMgr.byPointer(resp.$ref); + resp = Object.assign({}, this.specMgr.byPointer(resp.$ref)); resp.pointer = ref; } diff --git a/tests/schemas/responses-list-component.json b/tests/schemas/responses-list-component.json new file mode 100644 index 00000000..dccaa9d8 --- /dev/null +++ b/tests/schemas/responses-list-component.json @@ -0,0 +1,41 @@ +{ + "swagger": "2.0", + "info": { + }, + "host": "petstore.swagger.io", + "basePath": "/v2/", + "tags": [{ + "name": "traitTag", + "x-traitTag": true, + "description": "description1" + },{ + "name": "tag1", + "description": "tag1", + }], + "schemes": ["http"], + "paths": { + "/test1": { + "get": { + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/def1" + } + }, + "201": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/def1" + } + } + } + } + } + }, + "definitions": { + "def1": { + "type": "string" + } + } +}