Something went wrong. Try again.
fork of hey-api/openapi-ts because I need some additional things
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189import { pathToName } from '../path';
describe('pathToName', () => { // ── OpenAPI 3.x component schemas ──
it('handles top-level schema', () => { expect(pathToName(['components', 'schemas', 'User'])).toBe('User'); });
it('handles nested property', () => { expect(pathToName(['components', 'schemas', 'User', 'properties', 'address'])).toBe( 'User-address', ); });
it('handles deeply nested properties', () => { expect( pathToName(['components', 'schemas', 'User', 'properties', 'address', 'properties', 'city']), ).toBe('User-address-city'); });
it('handles property literally named "properties"', () => { expect(pathToName(['components', 'schemas', 'Foo', 'properties', 'properties'])).toBe( 'Foo-properties', ); });
it('handles property named "properties" with children', () => { expect( pathToName([ 'components', 'schemas', 'Foo', 'properties', 'properties', 'properties', 'items', ]), ).toBe('Foo-properties-items'); });
it('handles property named "items"', () => { expect(pathToName(['components', 'schemas', 'Foo', 'properties', 'items'])).toBe('Foo-items'); });
// ── additionalProperties ──
it('handles additionalProperties', () => { expect(pathToName(['components', 'schemas', 'Pet', 'additionalProperties'])).toBe('Pet-Value'); });
it('handles nested additionalProperties', () => { expect( pathToName([ 'components', 'schemas', 'Pet', 'properties', 'metadata', 'additionalProperties', ]), ).toBe('Pet-metadata-Value'); });
// ── Array items ──
it('handles array items (skips index)', () => { expect( pathToName(['components', 'schemas', 'Order', 'properties', 'line_items', 'items', 0]), ).toBe('Order-line_items'); });
it('handles items without numeric index', () => { expect(pathToName(['components', 'schemas', 'Result', 'items', 0])).toBe('Result'); });
// ── Tuple items ──
it('handles tuple items at different indices', () => { expect(pathToName(['components', 'schemas', 'Pair', 'items', 0])).toBe('Pair');
expect(pathToName(['components', 'schemas', 'Pair', 'items', 1])).toBe('Pair'); });
// ── patternProperties ──
it('handles patternProperties', () => { expect(pathToName(['components', 'schemas', 'Config', 'patternProperties', '^x-'])).toBe( 'Config-^x-', ); });
// ── OpenAPI 2.0 ──
it('handles definitions (OpenAPI 2.0)', () => { expect(pathToName(['definitions', 'User'])).toBe('User'); });
it('handles definitions with nested properties', () => { expect(pathToName(['definitions', 'User', 'properties', 'address'])).toBe('User-address'); });
// ── Paths (operations) ──
it('handles simple path', () => { expect(pathToName(['paths', '/event', 'get', 'properties', 'query'])).toBe('Event-get-query'); });
it('handles path with multiple segments', () => { expect(pathToName(['paths', '/api/v1/users', 'post', 'properties', 'body'])).toBe( 'ApiV1Users-post-body', ); });
it('handles path with parameter', () => { expect(pathToName(['paths', '/users/{id}/posts', 'get', 'properties', 'query'])).toBe( 'UsersIdPosts-get-query', ); });
it('handles path without properties', () => { expect(pathToName(['paths', '/event', 'get'])).toBe('Event-get'); });
// ── Webhooks ──
it('handles webhooks', () => { expect(pathToName(['webhooks', 'onEvent', 'post', 'properties', 'body'])).toBe( 'onEvent-post-body', ); });
// ── Component types beyond schemas ──
it('handles component parameters', () => { expect(pathToName(['components', 'parameters', 'UserId'])).toBe('UserId'); });
it('handles component requestBodies', () => { expect(pathToName(['components', 'requestBodies', 'CreateUser', 'properties', 'name'])).toBe( 'CreateUser-name', ); });
// ── Encoded characters ──
it('handles URI-encoded names', () => { expect(pathToName(['components', 'schemas', 'My%20Schema'])).toBe('My Schema'); });
// ── Anchor option ──
it('uses anchor for component schema', () => { expect( pathToName(['components', 'schemas', 'User', 'properties', 'address'], { anchor: 'UserDTO', }), ).toBe('UserDTO-address'); });
it('uses anchor for paths', () => { expect( pathToName(['paths', '/event', 'get', 'properties', 'query'], { anchor: 'event.subscribe', }), ).toBe('event.subscribe-query'); });
it('uses anchor and preserves structural suffix', () => { expect( pathToName(['components', 'schemas', 'Pet', 'additionalProperties'], { anchor: 'PetMap', }), ).toBe('PetMap-Value'); });
it('uses anchor with deeply nested properties', () => { expect( pathToName(['components', 'schemas', 'User', 'properties', 'address', 'properties', 'city'], { anchor: 'UserInput', }), ).toBe('UserInput-address-city'); });
it('uses anchor for unknown root', () => { expect(pathToName(['foo', 'bar', 'baz'], { anchor: 'Root' })).toBe('Root'); });});