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