diff --git a/lib/components/ResponsesSamples/responses-samples.ts b/lib/components/ResponsesSamples/responses-samples.ts index 9e6a436b..6e076adb 100644 --- a/lib/components/ResponsesSamples/responses-samples.ts +++ b/lib/components/ResponsesSamples/responses-samples.ts @@ -3,7 +3,7 @@ import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { BaseComponent, SpecManager } from '../base'; import JsonPointer from '../../utils/JsonPointer'; -import { statusCodeType } from '../../utils/helpers'; +import { statusCodeType, getJsonLike } from '../../utils/helpers'; function isNumeric(n) { @@ -11,7 +11,7 @@ function isNumeric(n) { } function hasExample(response) { - return ((response.examples && response.examples['application/json']) || + return ((response.examples && getJsonLike(response.examples)) || response.schema); } diff --git a/lib/components/SchemaSample/schema-sample.ts b/lib/components/SchemaSample/schema-sample.ts index 79a533d2..b458b24a 100644 --- a/lib/components/SchemaSample/schema-sample.ts +++ b/lib/components/SchemaSample/schema-sample.ts @@ -6,6 +6,7 @@ import * as OpenAPISampler from 'openapi-sampler'; import { BaseComponent, SpecManager } from '../base'; import { SchemaNormalizer } from '../../services/schema-normalizer.service'; +import { getJsonLike } from '../../utils/helpers'; @Component({ selector: 'schema-sample', @@ -42,8 +43,9 @@ export class SchemaSample extends BaseComponent implements OnInit { this.pointer += '/schema'; } - if (base.examples && base.examples['application/json']) { - sample = base.examples['application/json']; + let jsonLikeSample = base.examples && getJsonLike(base.examples); + if (jsonLikeSample) { + sample = jsonLikeSample; } else { let selectedDescendant; diff --git a/lib/utils/helpers.ts b/lib/utils/helpers.ts index 86fcc839..2ca43626 100644 --- a/lib/utils/helpers.ts +++ b/lib/utils/helpers.ts @@ -114,3 +114,17 @@ export function snapshot(obj) { return temp; } + +export function isJsonLike(contentType: string): boolean { + return contentType.search(/json/i) !== -1; +} + +export function getJsonLike(object: object) { + const jsonLikeKeys = Object.keys(object).filter(isJsonLike); + + if (!jsonLikeKeys.length) { + return false; + } + + return object[jsonLikeKeys.shift()]; +} diff --git a/tests/unit/helpers.spec.ts b/tests/unit/helpers.spec.ts index ac577bb5..3cba8224 100644 --- a/tests/unit/helpers.spec.ts +++ b/tests/unit/helpers.spec.ts @@ -1,6 +1,7 @@ 'use strict'; -import {statusCodeType} from '../../lib/utils/helpers'; +import {statusCodeType, isJsonLike, getJsonLike } from '../../lib/utils/helpers'; + describe('Utils', () => { describe('statusCodeType', () => { it('Should return info for status codes within 100 and 200', ()=> { @@ -30,4 +31,34 @@ describe('Utils', () => { (() => statusCodeType(600)).should.throw('invalid HTTP code'); }); }); + + describe('isJsonLike', () => { + it('Should return true for a string that contains `json`', () => { + isJsonLike('application/json').should.be.equal(true); + }); + it('Should return false for a string that does not contain `json`', () => { + isJsonLike('application/xml').should.be.equal(false); + }); + }); + + describe('getJsonLike', () => { + it('Should return a value when a JSON-like key exists', () => { + const examples = { + "application/vnd.api+json": { + "message": "Hello World" + }, + "application/xml": "Hello World" + }; + + (getJsonLike(examples).message).should.be.equal("Hello World"); + }); + + it('Should return undefined when no JSON-like key exists', () => { + const examples = { + "application/xml": "Hello World" + }; + + getJsonLike(examples).should.be.equal(false); + }); + }) });