github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/inputvalidation/validators_pointer_test.go (about) 1 package inputvalidation_test 2 3 import ( 4 "testing" 5 6 "github.com/pkg/errors" 7 8 "github.com/kyma-incubator/compass/components/director/pkg/str" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/kyma-incubator/compass/components/director/pkg/inputvalidation" 13 ) 14 15 func TestValidateExactlyOneNotNil(t *testing.T) { 16 // GIVEN 17 testErrorMessage := "test error message" 18 19 testCases := []struct { 20 Name string 21 Pointers []interface{} 22 ExpectedError error 23 }{ 24 { 25 Name: "Success", 26 Pointers: []interface{}{ 27 nil, nil, str.Ptr("ok"), 28 }, 29 ExpectedError: nil, 30 }, 31 { 32 Name: "Success when pointer to type", 33 Pointers: []interface{}{ 34 str.Ptr("ok"), nil, (*string)(nil), 35 }, 36 ExpectedError: nil, 37 }, 38 { 39 Name: "Success when one element", 40 Pointers: []interface{}{str.Ptr("ok")}, 41 ExpectedError: nil, 42 }, 43 { 44 Name: "Error when all nil", 45 Pointers: []interface{}{ 46 nil, nil, (*string)(nil), 47 }, 48 ExpectedError: errors.New(testErrorMessage), 49 }, 50 { 51 Name: "Error when more than one not nil", 52 Pointers: []interface{}{ 53 str.Ptr("ok"), nil, str.Ptr("notok"), 54 }, 55 ExpectedError: errors.New(testErrorMessage), 56 }, 57 { 58 Name: "Error when invalid use", 59 Pointers: []interface{}{ 60 5, str.Ptr("notok"), str.Ptr("notok"), 61 }, 62 ExpectedError: errors.New("field is not a pointer"), 63 }, 64 } 65 66 for _, testCase := range testCases { 67 t.Run(testCase.Name, func(t *testing.T) { 68 var ptrs []interface{} 69 if len(testCase.Pointers) > 1 { 70 ptrs = append(ptrs, testCase.Pointers[1:]...) 71 } 72 73 // WHEN 74 err := inputvalidation.ValidateExactlyOneNotNil(testErrorMessage, testCase.Pointers[0], ptrs...) 75 76 // THEN 77 if testCase.ExpectedError != nil { 78 require.EqualError(t, err, testCase.ExpectedError.Error()) 79 } else { 80 require.NoError(t, err) 81 } 82 }) 83 } 84 }