Something went wrong. Try again.
fork of hey-api/openapi-ts because I need some additional things
Something went wrong. Try again.
5.9 kB · 207 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208import { moduleSortKey } from '../render-utils';
const createFile = (finalPath: string, external = false) => { const parts = finalPath.split('/'); const filename = parts.at(-1)!; const dotIndex = filename.lastIndexOf('.'); return { extension: dotIndex > 0 ? filename.slice(dotIndex) : undefined, external, finalPath, name: dotIndex > 0 ? filename.slice(0, dotIndex) : filename, };};
const root = '/project/src';
describe('moduleSortKey', () => { describe('external imports (group 0)', () => { it('returns external module path unchanged', () => { const file = createFile('/project/src/client.py'); const fromFile = createFile('httpx', true);
const [group, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(group).toBe(0); expect(distance).toBe(0); expect(modulePath).toBe('httpx'); }); });
describe('local imports (group 2)', () => { describe('same directory', () => { it('converts sibling file to relative import', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/api/types.py');
const [group, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(group).toBe(2); expect(distance).toBe(0); expect(modulePath).toBe('.types'); });
it('handles index.py as implicit module', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/api/index.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('.'); });
it('handles __init__.py as implicit module', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/api/__init__.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('.'); }); });
describe('child directory', () => { it('converts nested path to dotted module', () => { const file = createFile('/project/src/client.py'); const fromFile = createFile('/project/src/models/user.py');
const [group, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(group).toBe(2); expect(distance).toBe(0); expect(modulePath).toBe('.models.user'); });
it('handles deeply nested paths', () => { const file = createFile('/project/src/client.py'); const fromFile = createFile('/project/src/api/v1/endpoints/users.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('.api.v1.endpoints.users'); });
it('handles index.py in child directory', () => { const file = createFile('/project/src/client.py'); const fromFile = createFile('/project/src/models/index.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('.models'); }); });
describe('parent directory', () => { it('converts single parent traversal', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/types.py');
const [group, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(group).toBe(2); expect(distance).toBe(1); expect(modulePath).toBe('..types'); });
it('converts double parent traversal', () => { const file = createFile('/project/src/api/v1/client.py'); const fromFile = createFile('/project/src/types.py');
const [, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(distance).toBe(2); expect(modulePath).toBe('...types'); });
it('handles index.py in parent directory', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/index.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('..'); }); });
describe('sibling directory', () => { it('converts sibling directory path', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/models/user.py');
const [, distance, modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(distance).toBe(1); expect(modulePath).toBe('..models.user'); });
it('handles index.py in sibling directory', () => { const file = createFile('/project/src/api/client.py'); const fromFile = createFile('/project/src/models/index.py');
const [, , modulePath] = moduleSortKey({ file, fromFile, preferFileExtension: '.py', root, });
expect(modulePath).toBe('..models'); }); }); });});