...

Source file src/github.com/go-openapi/analysis/internal/flatten/sortref/sort_ref_test.go

Documentation: github.com/go-openapi/analysis/internal/flatten/sortref

     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  		// Added shared parameters and responses
    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