fork of hey-api/openapi-ts because I need some additional things
1import { isTopLevelComponent, jsonPointerToPath, pathToJsonPointer } from '../ref';
2
3describe('jsonPointerToPath', () => {
4 it('parses root pointer', () => {
5 expect(jsonPointerToPath('#')).toEqual([]);
6 expect(jsonPointerToPath('')).toEqual([]);
7 });
8
9 it('parses component ref', () => {
10 expect(jsonPointerToPath('#/components/schemas/Foo')).toEqual(['components', 'schemas', 'Foo']);
11 });
12
13 it('parses deep path ref', () => {
14 expect(jsonPointerToPath('#/components/schemas/Foo/properties/bar/items')).toEqual([
15 'components',
16 'schemas',
17 'Foo',
18 'properties',
19 'bar',
20 'items',
21 ]);
22 });
23});
24
25describe('pathToJsonPointer', () => {
26 it('converts empty path to root pointer', () => {
27 expect(pathToJsonPointer([])).toBe('#');
28 });
29
30 it('converts path to pointer', () => {
31 expect(pathToJsonPointer(['components', 'schemas', 'Foo'])).toBe('#/components/schemas/Foo');
32 });
33});
34
35describe('isTopLevelComponent', () => {
36 describe('OpenAPI 3.x refs', () => {
37 it('returns true for top-level component refs', () => {
38 expect(isTopLevelComponent('#/components/schemas/Foo')).toBe(true);
39 expect(isTopLevelComponent('#/components/parameters/Bar')).toBe(true);
40 expect(isTopLevelComponent('#/components/responses/Error')).toBe(true);
41 expect(isTopLevelComponent('#/components/requestBodies/Body')).toBe(true);
42 });
43
44 it('returns false for deep path refs', () => {
45 expect(isTopLevelComponent('#/components/schemas/Foo/properties/bar')).toBe(false);
46 expect(isTopLevelComponent('#/components/schemas/Foo/properties/bar/items')).toBe(false);
47 expect(isTopLevelComponent('#/components/schemas/Foo/allOf/0')).toBe(false);
48 });
49 });
50
51 describe('OpenAPI 2.0 refs', () => {
52 it('returns true for top-level definitions refs', () => {
53 expect(isTopLevelComponent('#/definitions/Foo')).toBe(true);
54 expect(isTopLevelComponent('#/definitions/Bar')).toBe(true);
55 });
56
57 it('returns false for deep path refs', () => {
58 expect(isTopLevelComponent('#/definitions/Foo/properties/bar')).toBe(false);
59 expect(isTopLevelComponent('#/definitions/Foo/properties/bar/items')).toBe(false);
60 });
61 });
62
63 describe('non-component refs', () => {
64 it('returns false for path refs', () => {
65 expect(isTopLevelComponent('#/paths/~1users/get')).toBe(false);
66 });
67
68 it('returns false for other refs', () => {
69 expect(isTopLevelComponent('#/info/title')).toBe(false);
70 });
71 });
72});