-
Notifications
You must be signed in to change notification settings - Fork 0
/
decode_type_test.go
124 lines (102 loc) · 2.48 KB
/
decode_type_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package inreq
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
)
func TestDecodeType(t *testing.T) {
r := httptest.NewRequest(http.MethodPost, "/", nil)
q := r.URL.Query()
q.Add("val", "v1")
r.URL.RawQuery = q.Encode()
type DataType struct {
Val string `inreq:"query"`
}
v, err := DecodeType[DataType](r)
require.NoError(t, err)
require.Equal(t, "v1", v.Val)
}
func TestCustomDecodeType(t *testing.T) {
r := httptest.NewRequest(http.MethodPost, "/", nil)
q := r.URL.Query()
q.Add("val", "v1")
r.URL.RawQuery = q.Encode()
type DataType struct {
Val string `inreq:"query"`
}
v, err := CustomDecodeType[DataType](r, WithDefaultDecodeOperations())
require.NoError(t, err)
require.Equal(t, "v1", v.Val)
}
func TestDecodeTypePointer(t *testing.T) {
r := httptest.NewRequest(http.MethodPost, "/", nil)
q := r.URL.Query()
q.Add("val", "v1")
r.URL.RawQuery = q.Encode()
type DataType struct {
Val string `inreq:"query"`
}
v, err := DecodeType[*DataType](r)
require.NoError(t, err)
require.Equal(t, "v1", v.Val)
}
func TestDecodeTypeDecoder(t *testing.T) {
type DataType struct {
Val string `inreq:"query"`
}
d := NewTypeDecoder[DataType]()
r := httptest.NewRequest(http.MethodPost, "/", nil)
q := r.URL.Query()
q.Add("val", "v1")
r.URL.RawQuery = q.Encode()
v, err := d.Decode(r)
require.NoError(t, err)
require.Equal(t, "v1", v.Val)
}
func TestDecodeTypeMapTags(t *testing.T) {
r := httptest.NewRequest(http.MethodPost, "/", nil)
r.Header.Set("val", "x1")
r.Header.Set("x1", "x2")
type DataType struct {
Val string
X struct {
X1 string
}
}
data, err := DecodeType[DataType](r, WithMapTags(map[string]any{
"Val": "header",
"X": map[string]any{
"X1": "header",
},
}))
require.NoError(t, err)
require.Equal(t, "x1", data.Val)
d := NewTypeDecoder[DataType](WithMapTags(map[string]any{
"Val": "header",
"X": map[string]any{
"X1": "header",
},
}))
data2, err := d.Decode(r)
require.NoError(t, err)
require.Equal(t, "x1", data2.Val)
}
func TestDecodeTypeMapTagsOverrideStructTags(t *testing.T) {
r := httptest.NewRequest(http.MethodPost, "/?val=x1", nil)
r.Header.Set("x1", "x2")
type DataType struct {
Val string `inreq:"query"`
X struct {
X1 string `inreq:"query"`
}
}
data, err := DecodeType[DataType](r, WithMapTags(map[string]any{
"X": map[string]any{
"X1": "header",
},
}))
require.NoError(t, err)
require.Equal(t, "x1", data.Val)
require.Equal(t, "x2", data.X.X1)
}