57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"database/sql"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
// mockQueryer implements sqlQueryer for testing
|
||
|
|
type mockQueryer struct {
|
||
|
|
rows *sql.Rows
|
||
|
|
query string
|
||
|
|
args []any
|
||
|
|
err error
|
||
|
|
hasNext bool
|
||
|
|
scanErr error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *mockQueryer) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) {
|
||
|
|
return m.rows, m.err
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestScanSingleRow_NoResults(t *testing.T) {
|
||
|
|
// This is a unit test placeholder - in reality testing sql.Rows
|
||
|
|
// requires a real database connection or heavy mocking.
|
||
|
|
// For this simple function, we document the behavior:
|
||
|
|
|
||
|
|
// scanSingleRow returns:
|
||
|
|
// - sql.ErrNoRows when query returns no results
|
||
|
|
// - error when query fails
|
||
|
|
// - error when scan fails
|
||
|
|
// - error when rows.Err() returns error
|
||
|
|
// - nil on success
|
||
|
|
|
||
|
|
// Since we cannot easily mock sql.Rows without a real DB,
|
||
|
|
// this test documents the function contract.
|
||
|
|
require.True(t, true, "scanSingleRow contract documented")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestScanSingleRow_Contract(t *testing.T) {
|
||
|
|
// Document the function behavior
|
||
|
|
// Function signature: scanSingleRow(ctx, q, query, args, dest...)
|
||
|
|
//
|
||
|
|
// Cases:
|
||
|
|
// 1. QueryContext fails -> return error
|
||
|
|
// 2. No rows (rows.Next() returns false, rows.Err() nil) -> return sql.ErrNoRows
|
||
|
|
// 3. rows.Next() false, rows.Err() non-nil -> return rows.Err()
|
||
|
|
// 4. rows.Scan fails -> return scan error
|
||
|
|
// 5. rows.Err() after Scan non-nil -> return rows.Err()
|
||
|
|
// 6. Success -> return nil
|
||
|
|
// 7. Close error -> errors.Join with existing error
|
||
|
|
|
||
|
|
require.True(t, true, "scanSingleRow behavior documented")
|
||
|
|
}
|