...

Source file src/go.einride.tech/aip/reflect/aipreflect/validateresourcereferences_test.go

Documentation: go.einride.tech/aip/reflect/aipreflect

     1  package aipreflect
     2  
     3  import (
     4  	"testing"
     5  
     6  	examplefreightv1 "go.einride.tech/aip/proto/gen/einride/example/freight/v1"
     7  	"google.golang.org/protobuf/proto"
     8  	"gotest.tools/v3/assert"
     9  )
    10  
    11  func TestValidateResourceReferences(t *testing.T) {
    12  	t.Parallel()
    13  	for _, tt := range []struct {
    14  		name          string
    15  		message       proto.Message
    16  		errorContains string
    17  	}{
    18  		{
    19  			name:    "empty",
    20  			message: &examplefreightv1.Shipment{},
    21  		},
    22  
    23  		{
    24  			name: "valid",
    25  			message: &examplefreightv1.Shipment{
    26  				OriginSite:      "shippers/1/sites/1",
    27  				DestinationSite: "shippers/1/sites/2",
    28  			},
    29  		},
    30  
    31  		{
    32  			name:    "valid repeated empty",
    33  			message: &examplefreightv1.BatchGetSitesRequest{},
    34  		},
    35  
    36  		{
    37  			name: "valid repeated",
    38  			message: &examplefreightv1.BatchGetSitesRequest{
    39  				Names: []string{
    40  					"shippers/1/sites/1",
    41  					"shippers/1/sites/2",
    42  				},
    43  			},
    44  		},
    45  
    46  		{
    47  			name: "invalid",
    48  			message: &examplefreightv1.Shipment{
    49  				OriginSite:      "shippers/1",
    50  				DestinationSite: "shippers/1/sites/2",
    51  			},
    52  			errorContains: "value 'shippers/1' of field origin_site is not a valid resource reference" +
    53  				" for freight-example.einride.tech/Site",
    54  		},
    55  
    56  		{
    57  			name: "invalid nested",
    58  			message: &examplefreightv1.CreateShipmentRequest{
    59  				Shipment: &examplefreightv1.Shipment{
    60  					OriginSite:      "shippers/1",
    61  					DestinationSite: "shippers/1/sites/2",
    62  				},
    63  			},
    64  			errorContains: "value 'shippers/1' of field shipment.origin_site is not a valid resource reference" +
    65  				" for freight-example.einride.tech/Site",
    66  		},
    67  
    68  		{
    69  			name: "invalid repeated",
    70  			message: &examplefreightv1.BatchGetSitesRequest{
    71  				Names: []string{
    72  					"shippers/1/sites/1",
    73  					"shippers/1",
    74  				},
    75  			},
    76  			errorContains: "value 'shippers/1' of field names[1] is not a valid resource reference" +
    77  				" for freight-example.einride.tech/Site",
    78  		},
    79  	} {
    80  		tt := tt
    81  		t.Run(tt.name, func(t *testing.T) {
    82  			t.Parallel()
    83  			err := ValidateResourceReferences(tt.message)
    84  			if tt.errorContains != "" {
    85  				assert.ErrorContains(t, err, tt.errorContains)
    86  			} else {
    87  				assert.NilError(t, err)
    88  			}
    89  		})
    90  	}
    91  }
    92  

View as plain text