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  }