Skip to content

Commit 31416a5

Browse files
6543lunny
authored andcommitted
Fix API Bug (fail on empty assignees) (#8873)
* keep sure if assigneeIDs == nil -> do nothing * fix #8872 * Revert "keep sure if assigneeIDs == nil -> do nothing" -> go handle it itself preaty well This reverts commit e72d941. * clarity comparson Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * simplify * Update models/issue_assignees.go Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * Update issue_assignees.go * simplify more * add --if oneAssignee != ""-- again * Update models/issue_assignees.go Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * CI.restart() * Update issue_assignees.go * add Test for GetUserIDsByNames * add Test for MakeIDsFromAPIAssigneesToAdd * fix test
1 parent daab245 commit 31416a5

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

models/issue_assignees.go

+11-14
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ package models
77
import (
88
"fmt"
99

10+
"code.gitea.io/gitea/modules/util"
11+
1012
"xorm.io/xorm"
1113
)
1214

@@ -171,25 +173,20 @@ func toggleUserAssignee(e *xorm.Session, issue *Issue, assigneeID int64) (remove
171173
// MakeIDsFromAPIAssigneesToAdd returns an array with all assignee IDs
172174
func MakeIDsFromAPIAssigneesToAdd(oneAssignee string, multipleAssignees []string) (assigneeIDs []int64, err error) {
173175

176+
var requestAssignees []string
177+
174178
// Keeping the old assigning method for compatibility reasons
175-
if oneAssignee != "" {
176-
177-
// Prevent double adding assignees
178-
var isDouble bool
179-
for _, assignee := range multipleAssignees {
180-
if assignee == oneAssignee {
181-
isDouble = true
182-
break
183-
}
184-
}
179+
if oneAssignee != "" && !util.IsStringInSlice(oneAssignee, multipleAssignees) {
180+
requestAssignees = append(requestAssignees, oneAssignee)
181+
}
185182

186-
if !isDouble {
187-
multipleAssignees = append(multipleAssignees, oneAssignee)
188-
}
183+
//Prevent empty assignees
184+
if len(multipleAssignees) > 0 && multipleAssignees[0] != "" {
185+
requestAssignees = append(requestAssignees, multipleAssignees...)
189186
}
190187

191188
// Get the IDs of all assignees
192-
assigneeIDs, err = GetUserIDsByNames(multipleAssignees, false)
189+
assigneeIDs, err = GetUserIDsByNames(requestAssignees, false)
193190

194191
return
195192
}

models/issue_assignees_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,24 @@ func TestUpdateAssignee(t *testing.T) {
5959
assert.NoError(t, err)
6060
assert.False(t, isAssigned)
6161
}
62+
63+
func TestMakeIDsFromAPIAssigneesToAdd(t *testing.T) {
64+
IDs, err := MakeIDsFromAPIAssigneesToAdd("", []string{""})
65+
assert.NoError(t, err)
66+
assert.Equal(t, []int64{}, IDs)
67+
68+
IDs, err = MakeIDsFromAPIAssigneesToAdd("", []string{"none_existing_user"})
69+
assert.Error(t, err)
70+
71+
IDs, err = MakeIDsFromAPIAssigneesToAdd("user1", []string{"user1"})
72+
assert.NoError(t, err)
73+
assert.Equal(t, []int64{1}, IDs)
74+
75+
IDs, err = MakeIDsFromAPIAssigneesToAdd("user2", []string{""})
76+
assert.NoError(t, err)
77+
assert.Equal(t, []int64{2}, IDs)
78+
79+
IDs, err = MakeIDsFromAPIAssigneesToAdd("", []string{"user1", "user2"})
80+
assert.NoError(t, err)
81+
assert.Equal(t, []int64{1, 2}, IDs)
82+
}

models/user_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -373,3 +373,16 @@ func TestCreateUser_Issue5882(t *testing.T) {
373373
assert.NoError(t, DeleteUser(v.user))
374374
}
375375
}
376+
377+
func TestGetUserIDsByNames(t *testing.T) {
378+
379+
//ignore non existing
380+
IDs, err := GetUserIDsByNames([]string{"user1", "user2", "none_existing_user"}, true)
381+
assert.NoError(t, err)
382+
assert.Equal(t, []int64{1, 2}, IDs)
383+
384+
//ignore non existing
385+
IDs, err = GetUserIDsByNames([]string{"user1", "do_not_exist"}, false)
386+
assert.Error(t, err)
387+
assert.Equal(t, []int64(nil), IDs)
388+
}

0 commit comments

Comments
 (0)