From 891cd03b5abc1a5af637499cc77301c118c0e6a1 Mon Sep 17 00:00:00 2001 From: jake Date: Fri, 26 Sep 2025 16:16:53 -0400 Subject: [PATCH] adding support for returning more than one mock row --- lazy.go | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/lazy.go b/lazy.go index 5afefe8..aa2e780 100644 --- a/lazy.go +++ b/lazy.go @@ -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{