aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao2023-02-24 21:17:09 +0800
committerGitHub2023-02-24 21:17:09 +0800
commita8c4f8cebcc52a1c96fe481fc654598c4ef49fec (patch)
tree1ed7291f1043036996e3188881a9900ab7275653 /models
parent91fa0eb9d7b8c1bb5afac9d68161cf95ae0a02f8 (diff)
Fix db.Find bug (#23115)
Caused by #20821 Fix #23110
Diffstat (limited to 'models')
-rw-r--r--models/db/list.go (renamed from models/db/list_options.go)4
-rw-r--r--models/db/list_test.go48
2 files changed, 50 insertions, 2 deletions
diff --git a/models/db/list_options.go b/models/db/list.go
index 2456f90f3..9fb4d0741 100644
--- a/models/db/list_options.go
+++ b/models/db/list.go
@@ -134,7 +134,7 @@ func Find[T any](ctx context.Context, opts FindOptions, objects *[]T) error {
if !opts.IsListAll() {
sess.Limit(opts.GetSkipTake())
}
- return sess.Find(&objects)
+ return sess.Find(objects)
}
// Count represents a common count function which accept an options interface
@@ -148,5 +148,5 @@ func FindAndCount[T any](ctx context.Context, opts FindOptions, objects *[]T) (i
if !opts.IsListAll() {
sess.Limit(opts.GetSkipTake())
}
- return sess.FindAndCount(&objects)
+ return sess.FindAndCount(objects)
}
diff --git a/models/db/list_test.go b/models/db/list_test.go
new file mode 100644
index 000000000..ffef1e494
--- /dev/null
+++ b/models/db/list_test.go
@@ -0,0 +1,48 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package db_test
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/db"
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/unittest"
+
+ "github.com/stretchr/testify/assert"
+ "xorm.io/builder"
+)
+
+type mockListOptions struct {
+ db.ListOptions
+}
+
+func (opts *mockListOptions) IsListAll() bool {
+ return true
+}
+
+func (opts *mockListOptions) ToConds() builder.Cond {
+ return builder.NewCond()
+}
+
+func TestFind(t *testing.T) {
+ assert.NoError(t, unittest.PrepareTestDatabase())
+ xe := unittest.GetXORMEngine()
+ assert.NoError(t, xe.Sync(&repo_model.RepoUnit{}))
+
+ opts := mockListOptions{}
+ var repoUnits []repo_model.RepoUnit
+ err := db.Find(db.DefaultContext, &opts, &repoUnits)
+ assert.NoError(t, err)
+ assert.EqualValues(t, 83, len(repoUnits))
+
+ cnt, err := db.Count(db.DefaultContext, &opts, new(repo_model.RepoUnit))
+ assert.NoError(t, err)
+ assert.EqualValues(t, 83, cnt)
+
+ repoUnits = make([]repo_model.RepoUnit, 0, 10)
+ newCnt, err := db.FindAndCount(db.DefaultContext, &opts, &repoUnits)
+ assert.NoError(t, err)
+ assert.EqualValues(t, cnt, newCnt)
+}