1 package sortref
2
3 import (
4 "testing"
5
6 _ "github.com/go-openapi/analysis/internal/antest"
7 "github.com/stretchr/testify/assert"
8 )
9
10 func TestSortRef_DepthFirstSort(t *testing.T) {
11 values := []string{
12 "#/definitions/datedTag/allOf/0",
13 "#/definitions/pneumonoultramicroscopicsilicovolcanoconiosisAntidisestablishmentarianism",
14 "#/definitions/namedThing",
15 "#/definitions/datedTag/properties/id",
16 "#/paths/~1some~1where~1{id}/get/responses/200/schema",
17 "#/definitions/tags/additionalProperties/properties/id",
18 "#/parameters/someParam/schema",
19 "#/definitions/records/items/0/properties/createdAt",
20 "#/definitions/datedTaggedRecords",
21 "#/paths/~1some~1where~1{id}/get/responses/default/schema/properties/createdAt",
22 "#/definitions/namedAgain",
23 "#/definitions/tags",
24 "#/paths/~1some~1where~1{id}/get/responses/404/schema",
25 "#/definitions/datedRecords/items/1",
26 "#/definitions/records/items/0",
27 "#/definitions/datedTaggedRecords/items/0",
28 "#/definitions/datedTag/allOf/1",
29 "#/definitions/otherRecords/items/properties/createdAt",
30 "#/responses/someResponse/schema/properties/createdAt",
31 "#/definitions/namedAgain/properties/id",
32 "#/definitions/datedTag",
33 "#/paths/~1some~1where~1{id}/parameters/1/schema",
34 "#/parameters/someParam/schema/properties/createdAt",
35 "#/paths/~1some~1where~1{id}/get/parameters/2/schema/properties/createdAt",
36 "#/definitions/otherRecords",
37 "#/definitions/datedTaggedRecords/items/1",
38 "#/definitions/datedTaggedRecords/items/1/properties/createdAt",
39 "#/definitions/otherRecords/items",
40 "#/definitions/datedRecords/items/0",
41 "#/paths/~1some~1where~1{id}/get/responses/200/schema/properties/id",
42 "#/paths/~1some~1where~1{id}/get/responses/200/schema/properties/value",
43 "#/definitions/records",
44 "#/definitions/namedThing/properties/name/properties/id",
45 "#/definitions/datedTaggedRecords/additionalItems/properties/id",
46 "#/definitions/datedTaggedRecords/additionalItems/properties/value",
47 "#/definitions/datedRecords",
48 "#/definitions/datedTag/properties/value",
49 "#/definitions/pneumonoultramicroscopicsilicovolcanoconiosisAntidisestablishmentarianism/properties/floccinaucinihilipilificationCreatedAt",
50 "#/definitions/datedRecords/items/1/properties/createdAt",
51 "#/definitions/tags/additionalProperties",
52 "#/paths/~1some~1where~1{id}/parameters/1/schema/properties/createdAt",
53 "#/definitions/namedThing/properties/name",
54 "#/paths/~1some~1where~1{id}/get/responses/default/schema",
55 "#/definitions/tags/additionalProperties/properties/value",
56 "#/responses/someResponse/schema",
57 "#/definitions/datedTaggedRecords/additionalItems",
58 "#/paths/~1some~1where~1{id}/get/parameters/2/schema",
59 }
60
61 valuesMap := make(map[string]struct{}, len(values))
62 for _, v := range values {
63 valuesMap[v] = struct{}{}
64 }
65
66 expected := []string{
67
68 "#/parameters/someParam/schema/properties/createdAt",
69 "#/parameters/someParam/schema",
70 "#/responses/someResponse/schema/properties/createdAt",
71 "#/responses/someResponse/schema",
72 "#/paths/~1some~1where~1{id}/parameters/1/schema/properties/createdAt",
73 "#/paths/~1some~1where~1{id}/parameters/1/schema",
74 "#/paths/~1some~1where~1{id}/get/parameters/2/schema/properties/createdAt",
75 "#/paths/~1some~1where~1{id}/get/parameters/2/schema",
76 "#/paths/~1some~1where~1{id}/get/responses/200/schema/properties/id",
77 "#/paths/~1some~1where~1{id}/get/responses/200/schema/properties/value",
78 "#/paths/~1some~1where~1{id}/get/responses/200/schema",
79 "#/paths/~1some~1where~1{id}/get/responses/404/schema",
80 "#/paths/~1some~1where~1{id}/get/responses/default/schema/properties/createdAt",
81 "#/paths/~1some~1where~1{id}/get/responses/default/schema",
82 "#/definitions/datedRecords/items/1/properties/createdAt",
83 "#/definitions/datedTaggedRecords/items/1/properties/createdAt",
84 "#/definitions/namedThing/properties/name/properties/id",
85 "#/definitions/records/items/0/properties/createdAt",
86 "#/definitions/datedTaggedRecords/additionalItems/properties/id",
87 "#/definitions/datedTaggedRecords/additionalItems/properties/value",
88 "#/definitions/otherRecords/items/properties/createdAt",
89 "#/definitions/tags/additionalProperties/properties/id",
90 "#/definitions/tags/additionalProperties/properties/value",
91 "#/definitions/datedRecords/items/0",
92 "#/definitions/datedRecords/items/1",
93 "#/definitions/datedTag/allOf/0",
94 "#/definitions/datedTag/allOf/1",
95 "#/definitions/datedTag/properties/id",
96 "#/definitions/datedTag/properties/value",
97 "#/definitions/datedTaggedRecords/items/0",
98 "#/definitions/datedTaggedRecords/items/1",
99 "#/definitions/namedAgain/properties/id",
100 "#/definitions/namedThing/properties/name",
101 "#/definitions/pneumonoultramicroscopicsilicovolcanoconiosisAntidisestablishmentarianism/properties/" +
102 "floccinaucinihilipilificationCreatedAt",
103 "#/definitions/records/items/0",
104 "#/definitions/datedTaggedRecords/additionalItems",
105 "#/definitions/otherRecords/items",
106 "#/definitions/tags/additionalProperties",
107 "#/definitions/datedRecords",
108 "#/definitions/datedTag",
109 "#/definitions/datedTaggedRecords",
110 "#/definitions/namedAgain",
111 "#/definitions/namedThing",
112 "#/definitions/otherRecords",
113 "#/definitions/pneumonoultramicroscopicsilicovolcanoconiosisAntidisestablishmentarianism",
114 "#/definitions/records",
115 "#/definitions/tags",
116 }
117
118 assert.Equal(t, expected, DepthFirst(valuesMap))
119 }
120
121 func TestSortRef_TopmostFirst(t *testing.T) {
122 t.Parallel()
123
124 assert.Equal(t,
125 []string{"/a/b", "/a/b/c"},
126 TopmostFirst([]string{"/a/b/c", "/a/b"}),
127 )
128
129 assert.Equal(t,
130 []string{"/a/b", "/a/c"},
131 TopmostFirst([]string{"/a/c", "/a/b"}),
132 )
133
134 assert.Equal(t,
135 []string{"/a/b", "/a/c", "/a/b/c", "/a/b/d", "/a/a/b/d"},
136 TopmostFirst([]string{"/a/a/b/d", "/a/b", "/a/b/c", "/a/b/d", "/a/c"}),
137 )
138 }
139
View as plain text