Files

99 lines
2.2 KiB
Go

package hrana
import (
"reflect"
"testing"
)
func TestStmtWithPositionalArgs(t *testing.T) {
tests := []struct {
name string
args []any
want []Value
wantErr bool
}{
{
name: "int args",
args: []any{1, 2},
want: []Value{{Type: "integer", Value: "1"}, {Type: "integer", Value: "2"}},
},
{
name: "string args",
args: []any{"a", "b"},
want: []Value{{Type: "text", Value: "a"}, {Type: "text", Value: "b"}},
},
{
name: "invalid arg",
args: []any{make(chan int)},
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
stmt := Stmt{}
err := stmt.AddPositionalArgs(tt.args)
if (err != nil) != tt.wantErr {
t.Errorf("StmtWithPositionalArgs() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(stmt.Args, tt.want) {
t.Errorf("got = %v, want %v", stmt.Args, tt.want)
}
})
}
}
func TestStmtWithNamedArgs(t *testing.T) {
tests := []struct {
name string
args map[string]any
want []NamedArg
wantErr bool
}{
{
name: "int args",
args: map[string]any{"arg1": 1, "arg2": int64(2)},
want: []NamedArg{
{Name: "arg1", Value: Value{Type: "integer", Value: "1"}},
{Name: "arg2", Value: Value{Type: "integer", Value: "2"}},
},
},
{
name: "string args",
args: map[string]any{"arg1": "a", "arg2": "b"},
want: []NamedArg{
{Name: "arg1", Value: Value{Type: "text", Value: "a"}},
{Name: "arg2", Value: Value{Type: "text", Value: "b"}},
},
},
{
name: "invalid arg",
args: map[string]any{"arg1": make(chan int)},
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
stmt := Stmt{}
err := stmt.AddNamedArgs(tt.args)
if (err != nil) != tt.wantErr {
t.Errorf("StmtWithNamedArgs() error = %v, wantErr %v", err, tt.wantErr)
return
}
got := make(map[NamedArg]struct{})
want := make(map[NamedArg]struct{})
for _, arg := range stmt.NamedArgs {
got[arg] = struct{}{}
}
for _, arg := range tt.want {
want[arg] = struct{}{}
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got = %v, want %v", stmt.NamedArgs, tt.want)
}
})
}
}