From c1cc456aa5a66536b4b253bd274c86d07858db5f Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 5 Jul 2024 10:45:36 +0200 Subject: [PATCH 1/3] Test types.Int#MarshalJSON() --- types/int_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 types/int_test.go diff --git a/types/int_test.go b/types/int_test.go new file mode 100644 index 00000000..5945a687 --- /dev/null +++ b/types/int_test.go @@ -0,0 +1,29 @@ +package types + +import ( + "database/sql" + "github.com/stretchr/testify/require" + "testing" +) + +func TestInt_MarshalJSON(t *testing.T) { + subtests := []struct { + name string + input sql.NullInt64 + output string + }{ + {"null", sql.NullInt64{}, `null`}, + {"invalid", sql.NullInt64{Int64: 42}, `null`}, + {"zero", sql.NullInt64{Int64: 0, Valid: true}, `0`}, + {"negative", sql.NullInt64{Int64: -1, Valid: true}, `-1`}, + } + + for _, st := range subtests { + t.Run(st.name, func(t *testing.T) { + actual, err := Int{st.input}.MarshalJSON() + + require.NoError(t, err) + require.Equal(t, st.output, string(actual)) + }) + } +} From d8b9cb688301e72b60060a7b743aa4536a09693e Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 5 Jul 2024 11:07:32 +0200 Subject: [PATCH 2/3] Test types.Int#UnmarshalText() --- types/int_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/types/int_test.go b/types/int_test.go index 5945a687..0da0de29 100644 --- a/types/int_test.go +++ b/types/int_test.go @@ -27,3 +27,31 @@ func TestInt_MarshalJSON(t *testing.T) { }) } } + +func TestInt_UnmarshalText(t *testing.T) { + subtests := []struct { + name string + input string + output sql.NullInt64 + error bool + }{ + {"empty", "", sql.NullInt64{}, true}, + {"2p64", "18446744073709551616", sql.NullInt64{}, true}, + {"float", "0.0", sql.NullInt64{}, true}, + {"zero", "0", sql.NullInt64{Int64: 0, Valid: true}, false}, + {"negative", "-1", sql.NullInt64{Int64: -1, Valid: true}, false}, + {"2p62", "4611686018427387904", sql.NullInt64{Int64: 1 << 62, Valid: true}, false}, + } + + for _, st := range subtests { + t.Run(st.name, func(t *testing.T) { + var actual Int + if err := actual.UnmarshalText([]byte(st.input)); st.error { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, Int{NullInt64: st.output}, actual) + } + }) + } +} From 19e3b6489c05cac702b7d0defe9ece0dd3045aea Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 5 Jul 2024 11:08:29 +0200 Subject: [PATCH 3/3] Test types.Int#UnmarshalJSON() --- types/int_test.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/types/int_test.go b/types/int_test.go index 0da0de29..d8a0506c 100644 --- a/types/int_test.go +++ b/types/int_test.go @@ -55,3 +55,33 @@ func TestInt_UnmarshalText(t *testing.T) { }) } } + +func TestInt_UnmarshalJSON(t *testing.T) { + subtests := []struct { + name string + input string + output sql.NullInt64 + error bool + }{ + {"null", `null`, sql.NullInt64{}, false}, + {"bool", `false`, sql.NullInt64{}, true}, + {"2p64", `18446744073709551616`, sql.NullInt64{}, true}, + {"float", `0.0`, sql.NullInt64{}, true}, + {"string", `"0"`, sql.NullInt64{}, true}, + {"zero", `0`, sql.NullInt64{Int64: 0, Valid: true}, false}, + {"negative", `-1`, sql.NullInt64{Int64: -1, Valid: true}, false}, + {"2p62", `4611686018427387904`, sql.NullInt64{Int64: 1 << 62, Valid: true}, false}, + } + + for _, st := range subtests { + t.Run(st.name, func(t *testing.T) { + var actual Int + if err := actual.UnmarshalJSON([]byte(st.input)); st.error { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, Int{NullInt64: st.output}, actual) + } + }) + } +}