diff --git a/models/repo/user_repo.go b/models/repo/user_repo.go index 781a75730a..0f95f5ab6b 100644 --- a/models/repo/user_repo.go +++ b/models/repo/user_repo.go @@ -166,9 +166,9 @@ func GetReviewers(ctx context.Context, repo *Repository, doerID, posterID int64) // If isShowFullName is set to true, also include full name prefix search func GetIssuePostersWithSearch(ctx context.Context, repo *Repository, isPull bool, search string, isShowFullName bool) ([]*user_model.User, error) { users := make([]*user_model.User, 0, 30) - var prefixCond builder.Cond = builder.Like{"name", search + "%"} + prefixCond := db.BuildCaseInsensitiveLike("name", search+"%") if isShowFullName { - prefixCond = prefixCond.Or(builder.Like{"full_name", "%" + search + "%"}) + prefixCond = db.BuildCaseInsensitiveLike("full_name", "%"+search+"%") } cond := builder.In("`user`.id", diff --git a/tests/integration/issue_test.go b/tests/integration/issue_test.go index 4c0a64ad70..3cdb0b8a28 100644 --- a/tests/integration/issue_test.go +++ b/tests/integration/issue_test.go @@ -1336,3 +1336,46 @@ func TestIssueCount(t *testing.T) { allCount := htmlDoc.doc.Find("a[data-test-name='all-issue-count']").Text() assert.Contains(t, allCount, "2\u00a0All") } + +func TestIssuePostersSearch(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + type userSearchInfo struct { + UserID int64 `json:"user_id"` + UserName string `json:"username"` + } + + type userSearchResponse struct { + Results []*userSearchInfo `json:"results"` + } + + t.Run("Name search", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + defer test.MockVariableValue(&setting.UI.DefaultShowFullName, false)() + + req := NewRequest(t, "GET", "/user2/repo1/issues/posters?q=USer2") + resp := MakeRequest(t, req, http.StatusOK) + + var data userSearchResponse + DecodeJSON(t, resp, &data) + + assert.Len(t, data.Results, 1) + assert.EqualValues(t, "user2", data.Results[0].UserName) + assert.EqualValues(t, 2, data.Results[0].UserID) + }) + + t.Run("Full name search", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + defer test.MockVariableValue(&setting.UI.DefaultShowFullName, true)() + + req := NewRequest(t, "GET", "/user2/repo1/issues/posters?q=OnE") + resp := MakeRequest(t, req, http.StatusOK) + + var data userSearchResponse + DecodeJSON(t, resp, &data) + + assert.Len(t, data.Results, 1) + assert.EqualValues(t, "user1", data.Results[0].UserName) + assert.EqualValues(t, 1, data.Results[0].UserID) + }) +}