Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow JSON-like examples to be shown #225

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/components/ResponsesSamples/responses-samples.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
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) {
return (!isNaN(parseFloat(n)) && isFinite(n));
}

function hasExample(response) {
return ((response.examples && response.examples['application/json']) ||
return ((response.examples && getJsonLike(response.examples)) ||
response.schema);
}

Expand Down
6 changes: 4 additions & 2 deletions lib/components/SchemaSample/schema-sample.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -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;

Expand Down
14 changes: 14 additions & 0 deletions lib/utils/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()];
}
33 changes: 32 additions & 1 deletion tests/unit/helpers.spec.ts
Original file line number Diff line number Diff line change
@@ -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', ()=> {
Expand Down Expand Up @@ -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": "<message>Hello World</message>"
};

(getJsonLike(examples).message).should.be.equal("Hello World");
});

it('Should return undefined when no JSON-like key exists', () => {
const examples = {
"application/xml": "<message>Hello World</message>"
};

getJsonLike(examples).should.be.equal(false);
});
})
});