...
1 package single
2
3 import (
4 "fmt"
5 "testing"
6
7 "gotest.tools/v3/assert"
8 )
9
10 func TestBookResourceName(t *testing.T) {
11 t.Run("good", func(t *testing.T) {
12 const (
13 shelf = "shelf"
14 book = "book"
15 )
16 pattern := fmt.Sprintf("shelves/%s/books/%s", shelf, book)
17 var name BookResourceName
18 err := name.UnmarshalString(pattern)
19 assert.NilError(t, err)
20 assert.Equal(t, name.Shelf, shelf)
21 assert.Equal(t, name.Book, book)
22
23 marshalled, err := name.MarshalString()
24 assert.NilError(t, err)
25 assert.Equal(t, marshalled, pattern)
26 })
27
28 t.Run("bad top-level", func(t *testing.T) {
29 var name BookResourceName
30 err := name.UnmarshalString("books/book")
31 assert.Error(
32 t,
33 err,
34 "parse resource name 'books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got books",
35 )
36 })
37
38 t.Run("bad wrong parent", func(t *testing.T) {
39 var name BookResourceName
40 err := name.UnmarshalString("others/other/books/book")
41 assert.Error(
42 t,
43 err,
44 "parse resource name 'others/other/books/book' with pattern 'shelves/{shelf}/books/{book}': segment shelves: got others",
45 )
46 })
47 }
48
49 func TestShelfResourceName(t *testing.T) {
50 t.Run("good", func(t *testing.T) {
51 const shelf = "shelf"
52 pattern := fmt.Sprintf("shelves/%s", shelf)
53 var name ShelfResourceName
54 err := name.UnmarshalString(pattern)
55 assert.NilError(t, err)
56 assert.Equal(t, name.Shelf, shelf)
57
58 marshalled, err := name.MarshalString()
59 assert.NilError(t, err)
60 assert.Equal(t, marshalled, pattern)
61 })
62
63 t.Run("invalid", func(t *testing.T) {
64 var name ShelfResourceName
65 err := name.UnmarshalString("others/other")
66 assert.Error(t, err, "parse resource name 'others/other' with pattern 'shelves/{shelf}': segment shelves: got others")
67 })
68
69 t.Run("bad wrong parent", func(t *testing.T) {
70 var name ShelfResourceName
71 err := name.UnmarshalString("others/other/shelves/shelf")
72 assert.Error(
73 t,
74 err,
75 "parse resource name 'others/other/shelves/shelf' with pattern 'shelves/{shelf}': segment shelves: got others",
76 )
77 })
78 }
79
View as plain text