adding support for returning more than one mock row

This commit is contained in:
2025-09-26 16:16:53 -04:00
parent 38b0e8e930
commit 891cd03b5a

52
lazy.go
View File

@@ -14,39 +14,47 @@ import (
type MockResults struct {
Query string
Columns []string
Rows []driver.Value
Rows [][]driver.Value
}
func GenerateRandomResults(query string, exampleObj any, keyVal any) (*MockResults, error) {
func GenerateRandomResults(query string, exampleObj any, keyVal any, rowCount int) (*MockResults, error) {
if exampleObj == nil {
return nil, errors.New("exampleObj cannot be nil")
}
if rowCount == 0 {
rowCount = 1
}
retType := reflect.TypeOf(exampleObj)
maxFieldCount := retType.NumField()
columns := make([]string, 0, maxFieldCount)
rows := make([]driver.Value, 0, maxFieldCount)
rows := make([][]driver.Value, 0, maxFieldCount)
for x := 0; x < maxFieldCount; x++ {
field := retType.Field(x)
dbTag := field.Tag.Get("db")
if dbTag == "" {
continue
//double loop here to allow for multiple rows
for y := 0; y < rowCount; y++ {
for x := 0; x < maxFieldCount; x++ {
field := retType.Field(x)
dbTag := field.Tag.Get("db")
if dbTag == "" {
continue
}
if y == 0 {
columns = append(columns, dbTag)
}
if field.Tag.Get("test") == "key" {
rows[y] = append(rows[y], keyVal)
continue
}
nv := kindToRandom(field)
if nv == nil {
return nil, fmt.Errorf("could not match type: %s", retType.Name())
}
rows[y] = append(rows[y], nv)
}
columns = append(columns, dbTag)
if field.Tag.Get("test") == "key" {
rows = append(rows, keyVal)
continue
}
nv := kindToRandom(field)
if nv == nil {
return nil, fmt.Errorf("could not match type: %s", retType.Name())
}
rows = append(rows, nv)
}
return &MockResults{