...

Source file src/go.einride.tech/aip/cmd/protoc-gen-go-aip/internal/genaip/testdata/test/originallysinglepattern/pattern_test.go

Documentation: go.einride.tech/aip/cmd/protoc-gen-go-aip/internal/genaip/testdata/test/originallysinglepattern

     1  package originallysinglepattern
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"gotest.tools/v3/assert"
     8  )
     9  
    10  func TestParseBookMultiPatternResourceName(t *testing.T) {
    11  	goodPatterns := []string{
    12  		"shelves/shelf/books/book",
    13  		"publishers/publisher/books/book",
    14  	}
    15  	for _, pattern := range goodPatterns {
    16  		pattern := pattern
    17  		t.Run(pattern, func(t *testing.T) {
    18  			name, err := ParseBookMultiPatternResourceName(pattern)
    19  			assert.NilError(t, err)
    20  			assert.Equal(t, name.String(), pattern)
    21  		})
    22  	}
    23  
    24  	badPatterns := []string{
    25  		"books/book",
    26  		"others/other",
    27  		"others/other/books/book",
    28  	}
    29  	for _, pattern := range badPatterns {
    30  		pattern := pattern
    31  		t.Run(pattern, func(t *testing.T) {
    32  			_, err := ParseBookMultiPatternResourceName(pattern)
    33  			assert.Error(t, err, "no matching pattern")
    34  		})
    35  	}
    36  }
    37  
    38  func TestBookResourceName(t *testing.T) {
    39  	t.Run("good", func(t *testing.T) {
    40  		const (
    41  			shelf = "shelf"
    42  			book  = "book"
    43  		)
    44  		pattern := fmt.Sprintf("shelves/%s/books/%s", shelf, book)
    45  		var name BookResourceName
    46  		err := name.UnmarshalString(pattern)
    47  		assert.NilError(t, err)
    48  		assert.Equal(t, name.Shelf, shelf)
    49  		assert.Equal(t, name.Book, book)
    50  
    51  		marshalled, err := name.MarshalString()
    52  		assert.NilError(t, err)
    53  		assert.Equal(t, marshalled, pattern)
    54  	})
    55  
    56  	t.Run("bad top-level", func(t *testing.T) {
    57  		var name BookResourceName
    58  		err := name.UnmarshalString("books/book")
    59  		assert.Error(
    60  			t,
    61  			err,
    62  			"parse resource name 'books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got books",
    63  		)
    64  	})
    65  
    66  	t.Run("bad wrong parent", func(t *testing.T) {
    67  		var name BookResourceName
    68  		err := name.UnmarshalString("others/other/books/book")
    69  		assert.Error(
    70  			t,
    71  			err,
    72  			"parse resource name 'others/other/books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got others",
    73  		)
    74  	})
    75  
    76  	t.Run("bad newer parent", func(t *testing.T) {
    77  		var name BookResourceName
    78  		err := name.UnmarshalString("publishers/publisher/books/book")
    79  		assert.Error(
    80  			t,
    81  			err,
    82  			"parse resource name 'publishers/publisher/books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got publishers",
    83  		)
    84  	})
    85  }
    86  
    87  func TestShelvesBookResourceName(t *testing.T) {
    88  	t.Run("good", func(t *testing.T) {
    89  		const (
    90  			shelf = "shelf"
    91  			book  = "book"
    92  		)
    93  		pattern := fmt.Sprintf("shelves/%s/books/%s", shelf, book)
    94  		var name ShelvesBookResourceName
    95  		err := name.UnmarshalString(pattern)
    96  		assert.NilError(t, err)
    97  		assert.Equal(t, name.Shelf, shelf)
    98  		assert.Equal(t, name.Book, book)
    99  
   100  		marshalled, err := name.MarshalString()
   101  		assert.NilError(t, err)
   102  		assert.Equal(t, marshalled, pattern)
   103  	})
   104  
   105  	t.Run("bad top-level", func(t *testing.T) {
   106  		var name ShelvesBookResourceName
   107  		err := name.UnmarshalString("books/book")
   108  		assert.Error(
   109  			t,
   110  			err,
   111  			"parse resource name 'books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got books",
   112  		)
   113  	})
   114  
   115  	t.Run("bad wrong parent", func(t *testing.T) {
   116  		var name ShelvesBookResourceName
   117  		err := name.UnmarshalString("others/other/books/book")
   118  		assert.Error(
   119  			t,
   120  			err,
   121  			"parse resource name 'others/other/books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got others",
   122  		)
   123  	})
   124  }
   125  
   126  func TestPublishersBookResourceName(t *testing.T) {
   127  	t.Run("good", func(t *testing.T) {
   128  		const (
   129  			publisher = "publisher"
   130  			book      = "book"
   131  		)
   132  		pattern := fmt.Sprintf("publishers/%s/books/%s", publisher, book)
   133  		var name PublishersBookResourceName
   134  		err := name.UnmarshalString(pattern)
   135  		assert.NilError(t, err)
   136  		assert.Equal(t, name.Publisher, publisher)
   137  		assert.Equal(t, name.Book, book)
   138  
   139  		marshalled, err := name.MarshalString()
   140  		assert.NilError(t, err)
   141  		assert.Equal(t, marshalled, pattern)
   142  	})
   143  
   144  	t.Run("bad top-level", func(t *testing.T) {
   145  		var name PublishersBookResourceName
   146  		err := name.UnmarshalString("books/book")
   147  		assert.Error(
   148  			t,
   149  			err,
   150  			"parse resource name 'books/book' with pattern 'publishers/{publisher}/books/{book}': segment publishers: got books",
   151  		)
   152  	})
   153  
   154  	t.Run("bad wrong parent", func(t *testing.T) {
   155  		var name PublishersBookResourceName
   156  		err := name.UnmarshalString("others/other/books/book")
   157  		assert.Error(
   158  			t,
   159  			err,
   160  			"parse resource name 'others/other/books/book' with pattern 'publishers/{publisher}/books/{book}': segment publishers: got others",
   161  		)
   162  	})
   163  }
   164  
   165  func TestShelfResourceName(t *testing.T) {
   166  	t.Run("good", func(t *testing.T) {
   167  		const shelf = "shelf"
   168  		pattern := fmt.Sprintf("shelves/%s", shelf)
   169  		var name ShelfResourceName
   170  		err := name.UnmarshalString(pattern)
   171  		assert.NilError(t, err)
   172  		assert.Equal(t, name.Shelf, shelf)
   173  
   174  		marshalled, err := name.MarshalString()
   175  		assert.NilError(t, err)
   176  		assert.Equal(t, marshalled, pattern)
   177  	})
   178  
   179  	t.Run("invalid", func(t *testing.T) {
   180  		var name ShelfResourceName
   181  		err := name.UnmarshalString("others/other")
   182  		assert.Error(t, err, "parse resource name 'others/other' with pattern 'shelves/{shelf}': segment shelves: got others")
   183  	})
   184  
   185  	t.Run("bad wrong parent", func(t *testing.T) {
   186  		var name ShelfResourceName
   187  		err := name.UnmarshalString("others/other/shelves/shelf")
   188  		assert.Error(
   189  			t,
   190  			err,
   191  			"parse resource name 'others/other/shelves/shelf' with pattern 'shelves/{shelf}': segment shelves: got others",
   192  		)
   193  	})
   194  }
   195  
   196  func TestLibrariesShelfResourceName(t *testing.T) {
   197  	t.Run("good", func(t *testing.T) {
   198  		const (
   199  			library = "library"
   200  			shelf   = "shelf"
   201  		)
   202  		pattern := fmt.Sprintf("libraries/%s/shelves/%s", library, shelf)
   203  		var name LibrariesShelfResourceName
   204  		err := name.UnmarshalString(pattern)
   205  		assert.NilError(t, err)
   206  		assert.Equal(t, name.Library, library)
   207  		assert.Equal(t, name.Shelf, shelf)
   208  
   209  		marshalled, err := name.MarshalString()
   210  		assert.NilError(t, err)
   211  		assert.Equal(t, marshalled, pattern)
   212  	})
   213  
   214  	t.Run("bad top-level", func(t *testing.T) {
   215  		var name LibrariesShelfResourceName
   216  		err := name.UnmarshalString("books/book")
   217  		assert.Error(
   218  			t,
   219  			err,
   220  			"parse resource name 'books/book' with pattern 'libraries/{library}/shelves/{shelf}': segment libraries: got books",
   221  		)
   222  	})
   223  
   224  	t.Run("bad wrong parent", func(t *testing.T) {
   225  		var name LibrariesShelfResourceName
   226  		err := name.UnmarshalString("others/other/shelves/shelf")
   227  		assert.Error(
   228  			t,
   229  			err,
   230  			"parse resource name 'others/other/shelves/shelf' with pattern 'libraries/{library}/shelves/{shelf}': segment libraries: got others",
   231  		)
   232  	})
   233  }
   234  
   235  func TestRoomsShelfResourceName(t *testing.T) {
   236  	t.Run("good", func(t *testing.T) {
   237  		const (
   238  			room  = "room"
   239  			shelf = "shelf"
   240  		)
   241  		pattern := fmt.Sprintf("rooms/%s/shelves/%s", room, shelf)
   242  		var name RoomsShelfResourceName
   243  		err := name.UnmarshalString(pattern)
   244  		assert.NilError(t, err)
   245  		assert.Equal(t, name.Room, room)
   246  		assert.Equal(t, name.Shelf, shelf)
   247  
   248  		marshalled, err := name.MarshalString()
   249  		assert.NilError(t, err)
   250  		assert.Equal(t, marshalled, pattern)
   251  	})
   252  
   253  	t.Run("bad top-level", func(t *testing.T) {
   254  		var name RoomsShelfResourceName
   255  		err := name.UnmarshalString("books/book")
   256  		assert.Error(
   257  			t,
   258  			err,
   259  			"parse resource name 'books/book' with pattern 'rooms/{room}/shelves/{shelf}': segment rooms: got books",
   260  		)
   261  	})
   262  
   263  	t.Run("bad wrong parent", func(t *testing.T) {
   264  		var name RoomsShelfResourceName
   265  		err := name.UnmarshalString("others/other/shelves/shelf")
   266  		assert.Error(
   267  			t,
   268  			err,
   269  			"parse resource name 'others/other/shelves/shelf' with pattern 'rooms/{room}/shelves/{shelf}': segment rooms: got others",
   270  		)
   271  	})
   272  }
   273  

View as plain text