Skip to content

Commit 9d0dd25

Browse files
committed
feat: Color of "default" Response depends on other successful responses are specified
closes #197
1 parent d175a4d commit 9d0dd25

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

lib/components/ResponsesList/responses-list.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,12 @@ describe('Redoc components', () => {
5353
let resp2 = component.responses[1];
5454
resp1.code.should.not.be.equal(resp2.code);
5555
});
56+
57+
it('should set type of default as error if other 200-399 response is defined', () => {
58+
component.pointer = '#/paths/~1test2/get/responses';
59+
fixture.detectChanges();
60+
let resp1 = component.responses[1];
61+
resp1.type.should.be.equal('error');
62+
});
5663
});
5764
});

lib/components/ResponsesList/responses-list.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,16 @@ export class ResponsesList extends BaseSearchableComponent implements OnInit {
4444
let responses = this.componentSchema;
4545
if (!responses) return;
4646

47-
responses = Object.keys(responses).filter(respCode => {
47+
let hasSuccessResponses = false;
48+
let respCodes = Object.keys(responses).filter(respCode => {
49+
if ((parseInt(respCode) >= 100) && (parseInt(respCode) <=399)) {
50+
hasSuccessResponses = true;
51+
}
4852
// only response-codes and "default"
4953
return ( isNumeric(respCode) || (respCode === 'default'));
50-
}).map(respCode => {
54+
});
55+
56+
responses = respCodes.map(respCode => {
5157
let resp = responses[respCode];
5258
resp.pointer = JsonPointer.join(this.pointer, respCode);
5359
if (resp.$ref) {
@@ -58,7 +64,7 @@ export class ResponsesList extends BaseSearchableComponent implements OnInit {
5864

5965
resp.empty = !resp.schema;
6066
resp.code = respCode;
61-
resp.type = statusCodeType(resp.code);
67+
resp.type = statusCodeType(resp.code, hasSuccessResponses);
6268

6369
resp.expanded = false;
6470
if (this.options.expandResponses) {

lib/components/ResponsesSamples/responses-samples.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ export class ResponsesSamples extends BaseComponent implements OnInit {
3737
let responses = this.componentSchema;
3838
if (!responses) return;
3939

40+
let hasSuccessResponses = false;
4041
responses = Object.keys(responses).filter(respCode => {
42+
if ((parseInt(respCode) >= 100) && (parseInt(respCode) <=399)) {
43+
hasSuccessResponses = true;
44+
}
4145
// only response-codes and "default"
4246
return ( isNumeric(respCode) || (respCode === 'default'));
4347
}).map(respCode => {
@@ -50,7 +54,7 @@ export class ResponsesSamples extends BaseComponent implements OnInit {
5054
}
5155

5256
resp.code = respCode;
53-
resp.type = statusCodeType(resp.code);
57+
resp.type = statusCodeType(resp.code, hasSuccessResponses);
5458
return resp;
5559
})
5660
.filter(response => hasExample(response));

lib/utils/helpers.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ export function groupBy<T>(array: T[], key:string):StringMap<T[]> {
3232
}, {});
3333
}
3434

35-
export function statusCodeType(statusCode) {
35+
export function statusCodeType(statusCode, defaultAsError = false) {
36+
if (statusCode === 'default') {
37+
return defaultAsError ? 'error' : 'success';
38+
}
39+
3640
if (statusCode < 100 || statusCode > 599) {
3741
throw new Error('invalid HTTP code');
3842
}

tests/schemas/responses-list-component.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,25 @@
3131
}
3232
}
3333
}
34-
}
34+
},
35+
"/test2": {
36+
"get": {
37+
"responses": {
38+
"200": {
39+
"description": "successful operation",
40+
"schema": {
41+
"$ref": "#/definitions/def1"
42+
}
43+
},
44+
"default": {
45+
"description": "successful operation",
46+
"schema": {
47+
"$ref": "#/definitions/def1"
48+
}
49+
}
50+
}
51+
}
52+
},
3553
},
3654
"definitions": {
3755
"def1": {

0 commit comments

Comments
 (0)