github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgegriderr/errors_test.go (about)

     1  package edgegriderr
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	validation "github.com/go-ozzo/ozzo-validation/v4"
     9  	"github.com/tj/assert"
    10  )
    11  
    12  func TestValidationErrorsParsing(t *testing.T) {
    13  	t.Run("no errors", func(t *testing.T) {
    14  		assert.Equal(t, nil, ParseValidationErrors(nil))
    15  	})
    16  
    17  	tests := map[string]struct {
    18  		input    validation.Errors
    19  		expected string
    20  	}{
    21  		"single error": {
    22  			input: validation.Errors{
    23  				"Error": fmt.Errorf("oops"),
    24  			},
    25  			expected: `
    26  Error: oops`,
    27  		},
    28  		"multiple errors": {
    29  			input: validation.Errors{
    30  				"Error1": fmt.Errorf("oops"),
    31  				"Error2": fmt.Errorf("oops"),
    32  			},
    33  			expected: `
    34  Error1: oops
    35  Error2: oops`,
    36  		},
    37  		"nested error": {
    38  			input: validation.Errors{
    39  				"Error": validation.Errors{
    40  					"0": validation.Errors{
    41  						"NestedError1": fmt.Errorf("oops"),
    42  					},
    43  				},
    44  			},
    45  			expected: `
    46  Error[0]: {
    47  	NestedError1: oops
    48  }`,
    49  		},
    50  		"multiple nested errors": {
    51  			input: validation.Errors{
    52  				"Error": validation.Errors{
    53  					"0": validation.Errors{
    54  						"NestedError1": fmt.Errorf("oops"),
    55  					},
    56  					"1": validation.Errors{
    57  						"NestedError1": fmt.Errorf("oops"),
    58  					},
    59  				},
    60  			},
    61  			expected: `
    62  Error[0]: {
    63  	NestedError1: oops
    64  }
    65  Error[1]: {
    66  	NestedError1: oops
    67  }`,
    68  		},
    69  		"errors on multiple levels": {
    70  			input: validation.Errors{
    71  				"Error1": validation.Errors{
    72  					"0": validation.Errors{
    73  						"NestedError": validation.Errors{
    74  							"0": validation.Errors{
    75  								"DoubleNestedError1": fmt.Errorf("oops"),
    76  								"DoubleNestedError2": fmt.Errorf("oops"),
    77  							},
    78  							"1": validation.Errors{
    79  								"DoubleNestedError1": fmt.Errorf("oops"),
    80  							},
    81  						},
    82  					},
    83  					"1": validation.Errors{
    84  						"NestedError1": fmt.Errorf("oops"),
    85  					},
    86  				},
    87  				"Error2": fmt.Errorf("oops"),
    88  			},
    89  			expected: `
    90  Error1[0]: {
    91  	NestedError[0]: {
    92  		DoubleNestedError1: oops
    93  		DoubleNestedError2: oops
    94  	}
    95  	NestedError[1]: {
    96  		DoubleNestedError1: oops
    97  	}
    98  }
    99  Error1[1]: {
   100  	NestedError1: oops
   101  }
   102  Error2: oops`,
   103  		},
   104  	}
   105  
   106  	for name, test := range tests {
   107  		t.Run(name, func(t *testing.T) {
   108  			assert.Equal(t, strings.TrimPrefix(test.expected, "\n"), ParseValidationErrors(test.input).Error())
   109  		})
   110  	}
   111  }