...

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

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

     1  package multipattern
     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 TestShelvesBookResourceName(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 ShelvesBookResourceName
    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 ShelvesBookResourceName
    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 ShelvesBookResourceName
    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  
    77  func TestPublishersBookResourceName(t *testing.T) {
    78  	t.Run("good", func(t *testing.T) {
    79  		const (
    80  			publisher = "publisher"
    81  			book      = "book"
    82  		)
    83  		pattern := fmt.Sprintf("publishers/%s/books/%s", publisher, book)
    84  		var name PublishersBookResourceName
    85  		err := name.UnmarshalString(pattern)
    86  		assert.NilError(t, err)
    87  		assert.Equal(t, name.Publisher, publisher)
    88  		assert.Equal(t, name.Book, book)
    89  
    90  		marshalled, err := name.MarshalString()
    91  		assert.NilError(t, err)
    92  		assert.Equal(t, marshalled, pattern)
    93  	})
    94  
    95  	t.Run("bad top-level", func(t *testing.T) {
    96  		var name PublishersBookResourceName
    97  		err := name.UnmarshalString("books/book")
    98  		assert.Error(
    99  			t,
   100  			err,
   101  			"parse resource name 'books/book' with pattern 'publishers/{publisher}/books/{book}': segment publishers: got books",
   102  		)
   103  	})
   104  
   105  	t.Run("bad wrong parent", func(t *testing.T) {
   106  		var name PublishersBookResourceName
   107  		err := name.UnmarshalString("others/other/books/book")
   108  		assert.Error(
   109  			t,
   110  			err,
   111  			"parse resource name 'others/other/books/book' with pattern 'publishers/{publisher}/books/{book}': segment publishers: got others",
   112  		)
   113  	})
   114  }
   115  
   116  func TestParseShelfMultiPatternResourceName(t *testing.T) {
   117  	goodPatterns := []string{
   118  		"shelves/shelf",
   119  		"libraries/library/shelves/shelf",
   120  		"rooms/room/shelves/shelf",
   121  	}
   122  	for _, pattern := range goodPatterns {
   123  		pattern := pattern
   124  		t.Run(pattern, func(t *testing.T) {
   125  			name, err := ParseShelfMultiPatternResourceName(pattern)
   126  			assert.NilError(t, err)
   127  			assert.Equal(t, name.String(), pattern)
   128  		})
   129  	}
   130  
   131  	badPatterns := []string{
   132  		"others/other",
   133  		"others/other/shelves/shelf",
   134  	}
   135  	for _, pattern := range badPatterns {
   136  		pattern := pattern
   137  		t.Run(pattern, func(t *testing.T) {
   138  			_, err := ParseShelfMultiPatternResourceName(pattern)
   139  			assert.Error(t, err, "no matching pattern")
   140  		})
   141  	}
   142  }
   143  
   144  func TestShelfResourceName(t *testing.T) {
   145  	t.Run("good", func(t *testing.T) {
   146  		const shelf = "shelf"
   147  		pattern := fmt.Sprintf("shelves/%s", shelf)
   148  		var name ShelfResourceName
   149  		err := name.UnmarshalString(pattern)
   150  		assert.NilError(t, err)
   151  		assert.Equal(t, name.Shelf, shelf)
   152  
   153  		marshalled, err := name.MarshalString()
   154  		assert.NilError(t, err)
   155  		assert.Equal(t, marshalled, pattern)
   156  	})
   157  
   158  	t.Run("invalid", func(t *testing.T) {
   159  		var name ShelfResourceName
   160  		err := name.UnmarshalString("others/other")
   161  		assert.Error(t, err, "parse resource name 'others/other' with pattern 'shelves/{shelf}': segment shelves: got others")
   162  	})
   163  
   164  	t.Run("bad wrong parent", func(t *testing.T) {
   165  		var name ShelfResourceName
   166  		err := name.UnmarshalString("others/other/shelves/shelf")
   167  		assert.Error(
   168  			t,
   169  			err,
   170  			"parse resource name 'others/other/shelves/shelf' with pattern 'shelves/{shelf}': segment shelves: got others",
   171  		)
   172  	})
   173  }
   174  
   175  func TestLibrariesShelfResourceName(t *testing.T) {
   176  	t.Run("good", func(t *testing.T) {
   177  		const (
   178  			library = "library"
   179  			shelf   = "shelf"
   180  		)
   181  		pattern := fmt.Sprintf("libraries/%s/shelves/%s", library, shelf)
   182  		var name LibrariesShelfResourceName
   183  		err := name.UnmarshalString(pattern)
   184  		assert.NilError(t, err)
   185  		assert.Equal(t, name.Library, library)
   186  		assert.Equal(t, name.Shelf, shelf)
   187  
   188  		marshalled, err := name.MarshalString()
   189  		assert.NilError(t, err)
   190  		assert.Equal(t, marshalled, pattern)
   191  	})
   192  
   193  	t.Run("bad top-level", func(t *testing.T) {
   194  		var name LibrariesShelfResourceName
   195  		err := name.UnmarshalString("books/book")
   196  		assert.Error(
   197  			t,
   198  			err,
   199  			"parse resource name 'books/book' with pattern 'libraries/{library}/shelves/{shelf}': segment libraries: got books",
   200  		)
   201  	})
   202  
   203  	t.Run("bad wrong parent", func(t *testing.T) {
   204  		var name LibrariesShelfResourceName
   205  		err := name.UnmarshalString("others/other/shelves/shelf")
   206  		assert.Error(
   207  			t,
   208  			err,
   209  			"parse resource name 'others/other/shelves/shelf' with pattern 'libraries/{library}/shelves/{shelf}': segment libraries: got others",
   210  		)
   211  	})
   212  }
   213  
   214  func TestRoomsShelfResourceName(t *testing.T) {
   215  	t.Run("good", func(t *testing.T) {
   216  		const (
   217  			room  = "room"
   218  			shelf = "shelf"
   219  		)
   220  		pattern := fmt.Sprintf("rooms/%s/shelves/%s", room, shelf)
   221  		var name RoomsShelfResourceName
   222  		err := name.UnmarshalString(pattern)
   223  		assert.NilError(t, err)
   224  		assert.Equal(t, name.Room, room)
   225  		assert.Equal(t, name.Shelf, shelf)
   226  
   227  		marshalled, err := name.MarshalString()
   228  		assert.NilError(t, err)
   229  		assert.Equal(t, marshalled, pattern)
   230  	})
   231  
   232  	t.Run("bad top-level", func(t *testing.T) {
   233  		var name RoomsShelfResourceName
   234  		err := name.UnmarshalString("books/book")
   235  		assert.Error(
   236  			t,
   237  			err,
   238  			"parse resource name 'books/book' with pattern 'rooms/{room}/shelves/{shelf}': segment rooms: got books",
   239  		)
   240  	})
   241  
   242  	t.Run("bad wrong parent", func(t *testing.T) {
   243  		var name RoomsShelfResourceName
   244  		err := name.UnmarshalString("others/other/shelves/shelf")
   245  		assert.Error(
   246  			t,
   247  			err,
   248  			"parse resource name 'others/other/shelves/shelf' with pattern 'rooms/{room}/shelves/{shelf}': segment rooms: got others",
   249  		)
   250  	})
   251  }
   252  

View as plain text