Skip to content

Commit 13165fb

Browse files
committed
fix: referenced header name is empty
1 parent e1b2065 commit 13165fb

File tree

3 files changed

+70
-4
lines changed

3 files changed

+70
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"openapi": "3.0.0",
3+
"info": {
4+
"version": "1.0",
5+
"title": "Foo"
6+
},
7+
"components": {
8+
"parameters": {
9+
"testParam": {
10+
"in": "path",
11+
"name": "test_name",
12+
"schema": { "type": "string" }
13+
}
14+
},
15+
"headers": {
16+
"testHeader": {
17+
"description": "The response content language",
18+
"schema": {
19+
"type": "string"
20+
}
21+
}
22+
}
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { FieldModel } from '../../models/Field';
2+
import { OpenAPIParser } from '../../OpenAPIParser';
3+
import { RedocNormalizedOptions } from '../../RedocNormalizedOptions';
4+
5+
const opts = new RedocNormalizedOptions({});
6+
7+
describe('Models', () => {
8+
describe('FieldModel', () => {
9+
let parser;
10+
const spec = require('../fixtures/fields.json');
11+
parser = new OpenAPIParser(spec, undefined, opts);
12+
13+
test('basic field details', () => {
14+
const field = new FieldModel(
15+
parser,
16+
{
17+
$ref: '#/components/parameters/testParam',
18+
},
19+
'#/components/parameters/testParam',
20+
opts,
21+
);
22+
23+
expect(field.name).toEqual('test_name');
24+
expect(field.in).toEqual('path');
25+
expect(field.required).toEqual(false);
26+
expect(field.schema.type).toEqual('string');
27+
});
28+
29+
test('field name should populated from name even if $ref (headers)', () => {
30+
const field = new FieldModel(
31+
parser,
32+
{
33+
$ref: '#/components/headers/testHeader',
34+
name: 'Test-Header',
35+
},
36+
'#/components/headers/testHeader',
37+
opts,
38+
);
39+
40+
expect(field.name).toEqual('Test-Header');
41+
});
42+
});
43+
});

src/services/models/Field.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ export class FieldModel {
2222

2323
constructor(
2424
parser: OpenAPIParser,
25-
infoOrRef: Referenced<OpenAPIParameter>,
25+
infoOrRef: Referenced<OpenAPIParameter> & { name?: string },
2626
pointer: string,
2727
options: RedocNormalizedOptions,
2828
) {
29-
const info = parser.deref(infoOrRef);
30-
31-
this.name = info.name;
29+
const info = parser.deref<OpenAPIParameter>(infoOrRef);
30+
this.name = infoOrRef.name || info.name;
3231
this.in = info.in;
3332
this.required = !!info.required;
3433
const schemaPointer = (parser.isRef(infoOrRef) ? infoOrRef.$ref : pointer) + '/schema';

0 commit comments

Comments
 (0)