...

Source file src/go.einride.tech/aip/fieldmask/validate_test.go

Documentation: go.einride.tech/aip/fieldmask

     1  package fieldmask
     2  
     3  import (
     4  	"testing"
     5  
     6  	"google.golang.org/genproto/googleapis/example/library/v1"
     7  	"google.golang.org/protobuf/proto"
     8  	"google.golang.org/protobuf/types/known/fieldmaskpb"
     9  	"gotest.tools/v3/assert"
    10  )
    11  
    12  func TestValidate(t *testing.T) {
    13  	t.Parallel()
    14  	for _, tt := range []struct {
    15  		name          string
    16  		fieldMask     *fieldmaskpb.FieldMask
    17  		message       proto.Message
    18  		errorContains string
    19  	}{
    20  		{
    21  			name:    "valid nil",
    22  			message: &library.Book{},
    23  		},
    24  		{
    25  			name:      "valid *",
    26  			fieldMask: &fieldmaskpb.FieldMask{Paths: []string{"*"}},
    27  			message:   &library.Book{},
    28  		},
    29  		{
    30  			name:          "invalid *",
    31  			fieldMask:     &fieldmaskpb.FieldMask{Paths: []string{"*", "author"}},
    32  			message:       &library.Book{},
    33  			errorContains: "invalid field path: '*' must not be used with other paths",
    34  		},
    35  		{
    36  			name:      "valid empty",
    37  			fieldMask: &fieldmaskpb.FieldMask{},
    38  			message:   &library.Book{},
    39  		},
    40  
    41  		{
    42  			name: "valid single",
    43  			fieldMask: &fieldmaskpb.FieldMask{
    44  				Paths: []string{"name", "author"},
    45  			},
    46  			message: &library.Book{},
    47  		},
    48  
    49  		{
    50  			name: "invalid single",
    51  			fieldMask: &fieldmaskpb.FieldMask{
    52  				Paths: []string{"name", "foo"},
    53  			},
    54  			message:       &library.Book{},
    55  			errorContains: "invalid field path: foo",
    56  		},
    57  
    58  		{
    59  			name: "valid nested",
    60  			fieldMask: &fieldmaskpb.FieldMask{
    61  				Paths: []string{"parent", "book.name"},
    62  			},
    63  			message: &library.CreateBookRequest{},
    64  		},
    65  
    66  		{
    67  			name: "invalid nested",
    68  			fieldMask: &fieldmaskpb.FieldMask{
    69  				Paths: []string{"parent", "book.foo"},
    70  			},
    71  			message:       &library.CreateBookRequest{},
    72  			errorContains: "invalid field path: book.foo",
    73  		},
    74  	} {
    75  		tt := tt
    76  		t.Run(tt.name, func(t *testing.T) {
    77  			t.Parallel()
    78  			if tt.errorContains != "" {
    79  				assert.ErrorContains(t, Validate(tt.fieldMask, tt.message), tt.errorContains)
    80  			} else {
    81  				assert.NilError(t, Validate(tt.fieldMask, tt.message))
    82  			}
    83  		})
    84  	}
    85  }
    86  

View as plain text