diff --git a/binding/form_mapping_test.go b/binding/form_mapping_test.go index 94b1dcb7..799c36c6 100644 --- a/binding/form_mapping_test.go +++ b/binding/form_mapping_test.go @@ -741,74 +741,78 @@ func (b *badCustom) UnmarshalParam(s string) error { return errors.New("boom") } -func TestTrySetCustomError(t *testing.T) { - var s struct { - F badCustom `form:"f"` - } +func TestTrySetCustom_SingleValues(t *testing.T) { + t.Run("Error case", func(t *testing.T) { + var s struct { + F badCustom `form:"f"` + } - err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form") - require.Error(t, err) - assert.Contains(t, err.Error(), "invalid value") + err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form") + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid value") + }) + + t.Run("Integration success", func(t *testing.T) { + var s struct { + F testCustom `form:"f"` + } + + err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form") + require.NoError(t, err) + assert.Equal(t, "prefix_hello", s.F.Value) + }) + + t.Run("Not applicable type", func(t *testing.T) { + var s struct { + N int `form:"n"` + } + + err := mappingByPtr(&s, formSource{"n": {"42"}}, "form") + require.NoError(t, err) + assert.Equal(t, 42, s.N) + }) } -func TestTrySetCustomNotApplicable(t *testing.T) { - var s struct { - N int `form:"n"` - } +func TestTrySetCustom_Collections(t *testing.T) { + t.Run("Slice success", func(t *testing.T) { + var s struct { + F []testCustom `form:"f"` + } - err := mappingByPtr(&s, formSource{"n": {"42"}}, "form") - require.NoError(t, err) - assert.Equal(t, 42, s.N) -} - -func TestTrySetCustomIntegrationSuccess(t *testing.T) { - var s struct { - F testCustom `form:"f"` - } - - err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form") - require.NoError(t, err) - assert.Equal(t, "prefix_hello", s.F.Value) -} - -func TestTrySetCustomSlice(t *testing.T) { - var s struct { - F []testCustom `form:"f"` - } - - err := mappingByPtr(&s, formSource{"f": {"one", "two"}}, "form") - require.NoError(t, err) - assert.Equal(t, "prefix_one", s.F[0].Value) - assert.Equal(t, "prefix_two", s.F[1].Value) -} - -func TestTrySetCustomArray(t *testing.T) { - var s struct { - F [2]testCustom `form:"f"` - } - - err := mappingByPtr(&s, formSource{"f": {"hello", "world"}}, "form") - require.NoError(t, err) - assert.Equal(t, "prefix_hello", s.F[0].Value) - assert.Equal(t, "prefix_world", s.F[1].Value) -} - -func TestTrySetCustomSliceError(t *testing.T) { - var s struct { - F []badCustom `form:"f"` - } - - err := mappingByPtr(&s, formSource{"f": {"oops1", "oops2"}}, "form") - require.Error(t, err) - assert.Contains(t, err.Error(), "invalid value") -} - -func TestTrySetCustomArrayError(t *testing.T) { - var s struct { - F [2]badCustom `form:"f"` - } - - err := mappingByPtr(&s, formSource{"f": {"fail1", "fail2"}}, "form") - require.Error(t, err) - assert.Contains(t, err.Error(), "invalid value") + err := mappingByPtr(&s, formSource{"f": {"one", "two"}}, "form") + require.NoError(t, err) + assert.Equal(t, "prefix_one", s.F[0].Value) + assert.Equal(t, "prefix_two", s.F[1].Value) + }) + + t.Run("Array success", func(t *testing.T) { + var s struct { + F [2]testCustom `form:"f"` + } + + err := mappingByPtr(&s, formSource{"f": {"hello", "world"}}, "form") + require.NoError(t, err) + assert.Equal(t, "prefix_hello", s.F[0].Value) + assert.Equal(t, "prefix_world", s.F[1].Value) + }) + + t.Run("Slice error", func(t *testing.T) { + var s struct { + F []badCustom `form:"f"` + } + + err := mappingByPtr(&s, formSource{"f": {"oops1", "oops2"}}, "form") + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid value") + }) + + t.Run("Array error", func(t *testing.T) { + var s struct { + F [2]badCustom `form:"f"` + } + + err := mappingByPtr(&s, formSource{"f": {"fail1", "fail2"}}, "form") + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid value") + }) }