diff --git a/dbxm/mysql_test.go b/dbxm/mysql_test.go new file mode 100644 index 0000000..a245f4c --- /dev/null +++ b/dbxm/mysql_test.go @@ -0,0 +1,15 @@ +package dbxm_test + +import ( + "testing" + + "gitea.auvem.com/go-toolkit/dbx" + "gitea.auvem.com/go-toolkit/dbx/internal/dbxshared" + _ "gitea.auvem.com/go-toolkit/dbx/dbxm" + "github.com/stretchr/testify/assert" +) + +func TestMySQLDebugLoggerRegistered(t *testing.T) { + err := dbxshared.InitLogger(dbx.DialectMySQL) + assert.NoError(t, err) +} diff --git a/dbxp/pxg_test.go b/dbxp/pxg_test.go new file mode 100644 index 0000000..90e8ce0 --- /dev/null +++ b/dbxp/pxg_test.go @@ -0,0 +1,15 @@ +package dbxp_test + +import ( + "testing" + + "gitea.auvem.com/go-toolkit/dbx" + "gitea.auvem.com/go-toolkit/dbx/internal/dbxshared" + _ "gitea.auvem.com/go-toolkit/dbx/dbxp" + "github.com/stretchr/testify/assert" +) + +func TestPostgresDebugLoggerRegistered(t *testing.T) { + err := dbxshared.InitLogger(dbx.DialectPostgres) + assert.NoError(t, err) +} diff --git a/jsonb_test.go b/jsonb_test.go new file mode 100644 index 0000000..fe7719f --- /dev/null +++ b/jsonb_test.go @@ -0,0 +1,52 @@ +package dbx + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestJSONB_ScanValue(t *testing.T) { + original := JSONB{"key": "value", "num": float64(1)} + + val, err := original.Value() + require.NoError(t, err) + + var scanned JSONB + require.NoError(t, scanned.Scan(val)) + assert.Equal(t, original["key"], scanned["key"]) + + require.NoError(t, scanned.Scan([]byte(`{"a":1}`))) + assert.Equal(t, float64(1), scanned["a"]) + + require.NoError(t, scanned.Scan(`{"b":2}`)) + assert.Equal(t, float64(2), scanned["b"]) +} + +func TestJSONB_ScanNil(t *testing.T) { + j := JSONB{"x": 1} + require.NoError(t, j.Scan(nil)) + assert.Nil(t, j) + + val, err := JSONB(nil).Value() + require.NoError(t, err) + assert.Nil(t, val) +} + +func TestJSONB_ScanUnsupportedType(t *testing.T) { + var j JSONB + err := j.Scan(123) + assert.Error(t, err) +} + +func TestNewJSONB(t *testing.T) { + data := map[string]any{"k": "v"} + j := NewJSONB(data) + assert.Equal(t, JSONB(data), j) +} + +func TestJSONB_String(t *testing.T) { + j := JSONB{"a": "b"} + assert.JSONEq(t, `{"a":"b"}`, j.String()) +} diff --git a/ptr_test.go b/ptr_test.go new file mode 100644 index 0000000..e4d5d41 --- /dev/null +++ b/ptr_test.go @@ -0,0 +1,26 @@ +package dbx + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestPtr_Val(t *testing.T) { + assert.Nil(t, Ptr("")) + assert.Equal(t, Ptr("hi"), Ptr("hi")) + assert.Equal(t, "", Val((*string)(nil))) + assert.Equal(t, "hi", Val(Ptr("hi"))) +} + +func TestStringToFilter(t *testing.T) { + assert.Equal(t, "%hello%world%", StringToFilter("hello world")) + assert.Equal(t, "%test%", StringToFilter("%test%")) +} + +func TestTrimPtr(t *testing.T) { + s := " hello " + assert.Equal(t, "hello", *TrimPtr(&s)) + assert.Nil(t, TrimPtr(nil)) + assert.Nil(t, TrimPtrToNil(Ptr(" "))) +} diff --git a/query_test.go b/query_test.go index 4dc7810..4aef167 100644 --- a/query_test.go +++ b/query_test.go @@ -78,3 +78,16 @@ func TestFetchOne_NilWhenEmpty(t *testing.T) { require.NoError(t, err) assert.Nil(t, result) } + +func TestMustFetchOne_NotFound(t *testing.T) { + errNotFound := errors.New("not found") + stmt := mockStatement{ + queryContextFn: func(_ context.Context, _ any) error { + return ErrNoRows + }, + } + + result, err := MustFetchOne[row](mockQueryable{}, stmt, errNotFound) + assert.Nil(t, result) + assert.ErrorIs(t, err, errNotFound) +}