...

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

Documentation: go.einride.tech/aip/resourcename

     1  package resourcename
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gotest.tools/v3/assert"
     7  )
     8  
     9  func TestValidate(t *testing.T) {
    10  	t.Parallel()
    11  	for _, tt := range []struct {
    12  		name          string
    13  		input         string
    14  		errorContains string
    15  	}{
    16  		{
    17  			name:          "empty",
    18  			input:         "",
    19  			errorContains: "empty",
    20  		},
    21  
    22  		{
    23  			name:          "invalid DNS characters",
    24  			input:         "ice cream is best",
    25  			errorContains: "not a valid DNS name",
    26  		},
    27  
    28  		{
    29  			name:          "invalid DNS characters in segment",
    30  			input:         "foo/bar/ice cream is best",
    31  			errorContains: "not a valid DNS name",
    32  		},
    33  
    34  		{
    35  			name:          "invalid DNS characters in domain",
    36  			input:         "//ice cream is best.com/foo/bar",
    37  			errorContains: "not a valid DNS name",
    38  		},
    39  
    40  		{
    41  			name:          "variable",
    42  			input:         "foo/bar/{baz}",
    43  			errorContains: "must not contain variables",
    44  		},
    45  
    46  		{
    47  			name:  "singleton",
    48  			input: "foo",
    49  		},
    50  
    51  		{
    52  			name:  "singleton wildcard",
    53  			input: "-",
    54  		},
    55  
    56  		{
    57  			name:  "multi",
    58  			input: "foo/bar",
    59  		},
    60  
    61  		{
    62  			name:  "multi wildcard at start",
    63  			input: "-/bar",
    64  		},
    65  
    66  		{
    67  			name:  "multi wildcard at end",
    68  			input: "foo/-",
    69  		},
    70  
    71  		{
    72  			name:  "multi wildcard at middle",
    73  			input: "foo/-/bar",
    74  		},
    75  
    76  		{
    77  			name:  "numeric",
    78  			input: "foo/1234/bar",
    79  		},
    80  
    81  		{
    82  			name:  "camelCase",
    83  			input: "FOO/1234/bAr",
    84  		},
    85  
    86  		{
    87  			name:  "full",
    88  			input: "//example.com/foo/bar",
    89  		},
    90  	} {
    91  		tt := tt
    92  		t.Run(tt.name, func(t *testing.T) {
    93  			t.Parallel()
    94  			err := Validate(tt.input)
    95  			if tt.errorContains != "" {
    96  				assert.ErrorContains(t, err, tt.errorContains)
    97  			} else {
    98  				assert.NilError(t, err)
    99  			}
   100  		})
   101  	}
   102  }
   103  
   104  func TestValidatePattern(t *testing.T) {
   105  	t.Parallel()
   106  	for _, tt := range []struct {
   107  		name          string
   108  		input         string
   109  		errorContains string
   110  	}{
   111  		{
   112  			name:          "empty",
   113  			input:         "",
   114  			errorContains: "empty",
   115  		},
   116  
   117  		{
   118  			name:          "invalid DNS characters",
   119  			input:         "ice cream is best",
   120  			errorContains: "not a valid DNS name",
   121  		},
   122  
   123  		{
   124  			name:          "invalid DNS characters in segment",
   125  			input:         "foo/bar/ice cream is best",
   126  			errorContains: "not a valid DNS name",
   127  		},
   128  
   129  		{
   130  			name:          "invalid DNS characters in domain",
   131  			input:         "//ice cream is best.com/foo/bar",
   132  			errorContains: "patterns can not be full resource names",
   133  		},
   134  
   135  		{
   136  			name:  "variable",
   137  			input: "foo/bar/{baz}",
   138  		},
   139  
   140  		{
   141  			name:  "singleton",
   142  			input: "foo",
   143  		},
   144  
   145  		{
   146  			name:          "singleton wildcard",
   147  			input:         "-",
   148  			errorContains: "wildcards not allowed in patterns",
   149  		},
   150  
   151  		{
   152  			name:  "multi",
   153  			input: "foo/bar",
   154  		},
   155  
   156  		{
   157  			name:          "multi wildcard at start",
   158  			input:         "-/bar",
   159  			errorContains: "wildcards not allowed in patterns",
   160  		},
   161  
   162  		{
   163  			name:          "multi wildcard at end",
   164  			input:         "foo/-",
   165  			errorContains: "wildcards not allowed in patterns",
   166  		},
   167  
   168  		{
   169  			name:          "multi wildcard at middle",
   170  			input:         "foo/-/bar",
   171  			errorContains: "wildcards not allowed in patterns",
   172  		},
   173  
   174  		{
   175  			name:  "numeric",
   176  			input: "foo/1234/bar",
   177  		},
   178  
   179  		{
   180  			name:  "camelCase",
   181  			input: "FOO/1234/bAr",
   182  		},
   183  
   184  		{
   185  			name:          "full",
   186  			input:         "//example.com/foo/bar",
   187  			errorContains: "patterns can not be full resource names",
   188  		},
   189  
   190  		{
   191  			name:          "invalid variable name",
   192  			input:         "fooBars/{fooBar}",
   193  			errorContains: "must be valid snake case",
   194  		},
   195  
   196  		{
   197  			name:  "valid variable name",
   198  			input: "fooBars/{foo_bar}",
   199  		},
   200  	} {
   201  		tt := tt
   202  		t.Run(tt.name, func(t *testing.T) {
   203  			t.Parallel()
   204  			err := ValidatePattern(tt.input)
   205  			if tt.errorContains != "" {
   206  				assert.ErrorContains(t, err, tt.errorContains)
   207  			} else {
   208  				assert.NilError(t, err)
   209  			}
   210  		})
   211  	}
   212  }
   213  

View as plain text