...

Source file src/github.com/go-openapi/spec/validations_test.go

Documentation: github.com/go-openapi/spec

     1  package spec
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/go-openapi/swag"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func mkVal() SchemaValidations {
    11  	return SchemaValidations{
    12  		CommonValidations: CommonValidations{
    13  			Maximum:          swag.Float64(2.5),
    14  			ExclusiveMaximum: true,
    15  			Minimum:          swag.Float64(3.4),
    16  			ExclusiveMinimum: true,
    17  			MaxLength:        swag.Int64(15),
    18  			MinLength:        swag.Int64(16),
    19  			Pattern:          "abc",
    20  			MaxItems:         swag.Int64(17),
    21  			MinItems:         swag.Int64(18),
    22  			UniqueItems:      true,
    23  			MultipleOf:       swag.Float64(4.4),
    24  			Enum:             []interface{}{"a", 12.5},
    25  		},
    26  		PatternProperties: SchemaProperties{
    27  			"x": *BooleanProperty(),
    28  			"y": *BooleanProperty(),
    29  		},
    30  		MinProperties: swag.Int64(19),
    31  		MaxProperties: swag.Int64(20),
    32  	}
    33  }
    34  
    35  func TestValidations(t *testing.T) {
    36  
    37  	var cv CommonValidations
    38  	val := mkVal()
    39  	cv.SetValidations(val)
    40  
    41  	expectedCV := val.CommonValidations
    42  	require.EqualValues(t, expectedCV, cv)
    43  
    44  	require.True(t, cv.HasArrayValidations())
    45  	require.True(t, cv.HasNumberValidations())
    46  	require.True(t, cv.HasStringValidations())
    47  	require.True(t, cv.HasEnum())
    48  
    49  	cv.Enum = nil
    50  	require.False(t, cv.HasEnum())
    51  
    52  	cv.MaxLength = nil
    53  	require.True(t, cv.HasStringValidations())
    54  	cv.MinLength = nil
    55  	require.True(t, cv.HasStringValidations())
    56  	cv.Pattern = ""
    57  	require.False(t, cv.HasStringValidations())
    58  
    59  	cv.Minimum = nil
    60  	require.True(t, cv.HasNumberValidations())
    61  	cv.Maximum = nil
    62  	require.True(t, cv.HasNumberValidations())
    63  	cv.MultipleOf = nil
    64  	require.False(t, cv.HasNumberValidations())
    65  
    66  	cv.MaxItems = nil
    67  	require.True(t, cv.HasArrayValidations())
    68  	cv.MinItems = nil
    69  	require.True(t, cv.HasArrayValidations())
    70  	cv.UniqueItems = false
    71  	require.False(t, cv.HasArrayValidations())
    72  
    73  	val = mkVal()
    74  	expectedSV := val
    75  	expectedSV.PatternProperties = nil
    76  	expectedSV.MinProperties = nil
    77  	expectedSV.MaxProperties = nil
    78  
    79  	val = mkVal()
    80  	cv.SetValidations(val)
    81  	require.EqualValues(t, expectedSV, cv.Validations())
    82  
    83  	var sv SchemaValidations
    84  	val = mkVal()
    85  	sv.SetValidations(val)
    86  
    87  	expectedSV = val
    88  	require.EqualValues(t, expectedSV, sv)
    89  
    90  	require.EqualValues(t, val, sv.Validations())
    91  
    92  	require.True(t, sv.HasObjectValidations())
    93  	sv.MinProperties = nil
    94  	require.True(t, sv.HasObjectValidations())
    95  	sv.MaxProperties = nil
    96  	require.True(t, sv.HasObjectValidations())
    97  	sv.PatternProperties = nil
    98  	require.False(t, sv.HasObjectValidations())
    99  
   100  	val = mkVal()
   101  	cv.SetValidations(val)
   102  	cv.ClearStringValidations()
   103  	require.False(t, cv.HasStringValidations())
   104  
   105  	cv.ClearNumberValidations()
   106  	require.False(t, cv.HasNumberValidations())
   107  
   108  	cv.ClearArrayValidations()
   109  	require.False(t, cv.HasArrayValidations())
   110  
   111  	sv.SetValidations(val)
   112  	sv.ClearObjectValidations(func(validation string, _ interface{}) {
   113  		switch validation {
   114  		case "minProperties", "maxProperties", "patternProperties":
   115  			return
   116  		default:
   117  			t.Logf("unexpected validation %s", validation)
   118  			t.Fail()
   119  		}
   120  	})
   121  	require.Falsef(t, sv.HasObjectValidations(), "%#v", sv)
   122  }
   123  

View as plain text