Skip to content
This repository was archived by the owner on Dec 15, 2024. It is now read-only.

Commit 77e105e

Browse files
authored
formdata: handle optional fields correctly (#34)
1 parent 9551fc4 commit 77e105e

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

formdata/data.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ var (
2424

2525
func Parse(data url.Values, schema Schema) error {
2626
for name, parser := range schema {
27-
values, exists := data[name]
28-
if !exists {
29-
return ErrFieldNotPresent
30-
}
31-
27+
values := data[name]
3228
if err := parser.Parse(values); err != nil {
3329
return fmt.Errorf("%s: %w", ErrParseFailure.Error(), err)
3430
}

formdata/data_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,28 @@ func Test_Parse_HTMLForm(t *testing.T) {
117117
must.True(t, four)
118118
}
119119

120+
func Test_Parse_HTMLForm_optional(t *testing.T) {
121+
ctx := context.Background()
122+
request, err := http.NewRequestWithContext(ctx, http.MethodPost, "/", nil)
123+
must.NoError(t, err)
124+
125+
request.PostForm = make(url.Values)
126+
request.PostForm.Set("one", "1")
127+
128+
var (
129+
one string
130+
two string
131+
)
132+
133+
err2 := ParseForm(request, Schema{
134+
"one": String(&one),
135+
"two": StringOr(&two, "alternate"),
136+
})
137+
must.NoError(t, err2)
138+
must.Eq(t, "1", one)
139+
must.Eq(t, "alternate", two)
140+
}
141+
120142
func Test_Parse_HTMLForm_not_ready(t *testing.T) {
121143
ctx := context.Background()
122144
request, err := http.NewRequestWithContext(ctx, http.MethodPost, "/", nil)

0 commit comments

Comments
 (0)