From 5ee0b7a368a6dea01d8d83c56d3e5d727d7d7dfa Mon Sep 17 00:00:00 2001 From: Danis Kirasirov <dbgbbu@gmail.com> Date: Mon, 7 Apr 2025 17:27:00 +0300 Subject: [PATCH] add tests --- pkg/schema/field/number_test.go | 83 +++++++++++++++++++++++++++------ pkg/schema/field/string_test.go | 71 +++++++++++++++++++++++----- 2 files changed, 129 insertions(+), 25 deletions(-) diff --git a/pkg/schema/field/number_test.go b/pkg/schema/field/number_test.go index 43da0842..ec1f3219 100644 --- a/pkg/schema/field/number_test.go +++ b/pkg/schema/field/number_test.go @@ -5,8 +5,11 @@ import ( "math" "reflect" "testing" + "time" "git.perx.ru/perxis/perxis-go/pkg/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) type CustomInt int @@ -106,26 +109,80 @@ func TestNumberField_DecodeNonStrict(t *testing.T) { field *Field data interface{} want interface{} - wantErr bool + wantErr string }{ - {"Nil data", Number(NumberFormatInt), nil, nil, false}, - {"Correct int", Number(NumberFormatInt), int64(2), int64(2), false}, - {"Correct float", Number(NumberFormatFloat), 2.2, 2.2, false}, - {"String as float", Number(NumberFormatFloat), "2.2", 2.2, false}, - {"String as int", Number(NumberFormatInt), "2", int64(2), false}, - {"Incorrect data", Number(NumberFormatInt), "invalid", nil, true}, - {"Incorrect data type", Number(NumberFormatInt), []byte("invalid"), nil, true}, + { + name: "Nil data", + field: Number(NumberFormatInt), + data: nil, + want: nil, + }, + { + name: "Correct int", + field: Number(NumberFormatInt), + data: int64(2), + want: int64(2), + }, + { + name: "Correct float", + field: Number(NumberFormatFloat), + data: 2.2, + want: 2.2, + }, + { + name: "String as float", + field: Number(NumberFormatFloat), + data: "2.2", + want: 2.2, + }, + { + name: "String as int", + field: Number(NumberFormatInt), + data: "2", + want: int64(2), + }, + { + name: "String incorrect", + field: Number(NumberFormatInt), + data: "string", + wantErr: "error convert \"string\" to number", + }, + { + name: "Bool", + field: Number(NumberFormatInt), + data: true, + wantErr: "decode error: error convert \"%!s(bool=true)\" to number", + }, + { + name: "Time", + field: Number(NumberFormatInt), + data: time.Date(2023, 10, 1, 12, 0, 0, 0, time.UTC), + wantErr: "error convert \"2023-10-01 12:00:00 +0000 UTC\" to number", + }, + { + name: "Array", + field: Number(NumberFormatInt), + data: []interface{}{1, "2", nil}, + wantErr: "error convert \"[%!s(int=1) 2 <nil>]\" to number", + }, + { + name: "Object", + field: Number(NumberFormatInt), + data: map[string]any{"key": "value"}, + wantErr: "error convert \"map[key:value]\" to number", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := Decode(context.Background(), tt.field, tt.data, NonStrictMode()) - if (err != nil) != tt.wantErr { - t.Errorf("Decode() error = %v, wantErr %v", err, tt.wantErr) + if tt.wantErr != "" { + require.Error(t, err) + assert.ErrorContains(t, err, tt.wantErr) return } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Decode() got = %v, want %v", got, tt.want) - } + + require.NoError(t, err) + assert.Equal(t, tt.want, got) }) } } diff --git a/pkg/schema/field/string_test.go b/pkg/schema/field/string_test.go index 2a1f7be6..a47dc5ce 100644 --- a/pkg/schema/field/string_test.go +++ b/pkg/schema/field/string_test.go @@ -6,6 +6,10 @@ import ( "reflect" "strconv" "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) type customString string @@ -42,25 +46,68 @@ func TestStringField_DecodeNonStrict(t *testing.T) { field *Field data interface{} want interface{} - wantErr bool + wantErr string }{ - {"Correct", String(), "string", "string", false}, - {"Nil", String(), nil, nil, false}, - {"Int", String(), 42, "42", false}, - {"Float", String(), 3.14, "3.14", false}, - {"Bool", String(), true, "true", false}, - {"Array", String(), []interface{}{1, "2"}, "1 2", false}, + { + name: "Correct", + field: String(), + data: "string", + want: "string", + }, + { + name: "Nil", + field: String(), + data: nil, + want: nil, + }, + { + name: "Int", + field: String(), + data: int64(42), + want: "42", + }, + { + name: "Float", + field: String(), + data: 3.14, + want: "3.14", + }, + { + name: "Bool", + field: String(), + data: true, + want: "true", + }, + { + name: "Time", + field: String(), + data: time.Date(2023, 10, 1, 12, 0, 0, 0, time.UTC), + want: "2023-10-01 12:00:00 +0000 UTC", + }, + { + name: "Array", + field: String(), + data: []interface{}{1, "2", nil}, + want: "1 2 <nil>", + }, + { + name: "Object", + field: String(), + data: map[string]any{"key": "value"}, + want: "map[key:value]", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := Decode(context.Background(), tt.field, tt.data, NonStrictMode()) - if (err != nil) != tt.wantErr { - t.Errorf("Decode() error = %v, wantErr %v", err, tt.wantErr) + if tt.wantErr != "" { + require.Error(t, err) + assert.ErrorContains(t, err, tt.wantErr) return } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Decode() got = %v, want %v", got, tt.want) - } + + require.NoError(t, err) + assert.Equal(t, tt.want, got) }) } } -- GitLab