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