github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/inputvalidation/directive_test.go (about) 1 package inputvalidation 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 "github.com/stretchr/testify/assert" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 type testStruct struct { 15 returnErr error 16 } 17 18 func (ts testStruct) Validate() error { 19 if ts.returnErr != nil { 20 return validation.Errors{"field": ts.returnErr} 21 } 22 return nil 23 } 24 25 func TestDirective_Validate(t *testing.T) { 26 validatorDirective := NewDirective() 27 testErr := errors.New("testError") 28 ctx := context.TODO() 29 t.Run("success", func(t *testing.T) { 30 //GIVEN 31 ts := testStruct{} 32 // WHEN 33 result, err := validatorDirective.Validate(ctx, ts, next(ts, nil)) 34 // THEN 35 require.NoError(t, err) 36 require.Equal(t, ts, result) 37 }) 38 39 t.Run("object is invalid", func(t *testing.T) { 40 //GIVEN 41 ts := testStruct{returnErr: testErr} 42 // WHEN 43 result, err := validatorDirective.Validate(ctx, ts, next(ts, nil)) 44 // THEN 45 require.Error(t, err) 46 assert.Contains(t, err.Error(), "field=testError") 47 assert.Contains(t, err.Error(), "Invalid data testStruct") 48 require.Equal(t, ts, result) 49 }) 50 51 t.Run("object is not validatable", func(t *testing.T) { 52 _, err := validatorDirective.Validate(ctx, nil, next("test", nil)) 53 // THEN 54 require.Error(t, err) 55 assert.Contains(t, err.Error(), "object is not validatable") 56 }) 57 58 t.Run("next resolver return err", func(t *testing.T) { 59 // WHEN 60 _, err := validatorDirective.Validate(ctx, nil, next(nil, testErr)) 61 // THEN 62 require.Error(t, err) 63 }) 64 } 65 66 func next(obj interface{}, testErr error) func(ctx context.Context) (interface{}, error) { 67 return func(ctx context.Context) (i interface{}, e error) { 68 return obj, testErr 69 } 70 }