Skip to content

Commit da419e1

Browse files
fix(schema-example): add support for examples object [TDX-7760] (#816)
1 parent 1a2d7f9 commit da419e1

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/utils/schema-example.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,38 @@ describe('extractSampleForParam', () => {
1313
expect(extractSampleForParam({ example: 'xxx' }, 'key')).toEqual('xxx')
1414
})
1515

16+
it('should extract value from example object with value field', () => {
17+
expect(extractSampleForParam({ example: { value: 'xxx' } }, 'key')).toEqual('xxx')
18+
})
19+
20+
it('should extract numeric value from example object with value field', () => {
21+
expect(extractSampleForParam({ example: { value: 42 } }, 'key')).toEqual(42)
22+
})
23+
1624
it('should return example from schema', () => {
1725
expect(extractSampleForParam({ schema: { examples: ['xxx'] } }, 'key')).toEqual('xxx')
1826
})
1927

28+
it('should extract value from schema examples object with value field', () => {
29+
expect(extractSampleForParam({ schema: { examples: [{ value: 'xxx' }] } }, 'key')).toEqual('xxx')
30+
})
31+
32+
it('should return schema example if present', () => {
33+
expect(extractSampleForParam({ schema: { example: 'xxx' } }, 'key')).toEqual('xxx')
34+
})
35+
36+
it('should extract value from schema example object with value field', () => {
37+
expect(extractSampleForParam({ schema: { example: { value: 99 } } }, 'key')).toEqual(99)
38+
})
39+
2040
it('should handle examples array', () => {
2141
expect(extractSampleForParam({ examples: ['xxx'] }, 'key')).toEqual('xxx')
2242
})
2343

44+
it('should extract value from examples array object with value field', () => {
45+
expect(extractSampleForParam({ examples: [{ value: 'xxx' }] }, 'key')).toEqual('xxx')
46+
})
47+
2448
it('should return first element of enum', () => {
2549
expect(extractSampleForParam({ enum: ['a', 'b'] }, 'key')).toEqual('a')
2650
})

src/utils/schema-example.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import { MAX_NESTED_LEVELS } from '@/constants'
22
import { resolveSchemaObjectFields, resolveSchemaType } from './schema-model'
33

4+
/**
5+
* util to extract example value from a given example, as example can be a primitive value or an object with value field
6+
*
7+
* @param example The example to extract value from
8+
* @returns The extracted example value
9+
*/
10+
const extractExampleValue = (example: any): any => typeof example === 'object' && example?.value ? example.value : example
11+
412
/**
513
* Returning sample value for single parameter
614
*
@@ -15,25 +23,32 @@ export const extractSampleForParam = (paramData: Record<string, any> | undefined
1523

1624
let exampleValue = paramData.example
1725
if (exampleValue !== undefined) {
26+
exampleValue = extractExampleValue(exampleValue)
1827
return exampleValue
1928
}
2029

2130
if (paramData.schema?.examples) {
2231
exampleValue = paramData.schema?.examples[0]
32+
exampleValue = extractExampleValue(exampleValue)
2333
if (exampleValue !== undefined) {
2434
return exampleValue
2535
}
2636
}
2737

2838
if (paramData.schema?.example) {
2939
exampleValue = paramData.schema?.example
40+
exampleValue = extractExampleValue(exampleValue)
3041
if (exampleValue !== undefined) {
3142
return exampleValue
3243
}
3344
}
3445

3546
if (paramData.examples) {
3647
exampleValue = paramData.examples[0]
48+
exampleValue = extractExampleValue(exampleValue)
49+
if (exampleValue !== undefined) {
50+
return exampleValue
51+
}
3752
if (exampleValue !== undefined) {
3853
return exampleValue
3954
}

0 commit comments

Comments
 (0)