1
Fork 0

fix: never set Poster or Assignee to nil

When a user is not found for whatever reason, it must be mapped to the
GhostUser.

Fixes: https://codeberg.org/forgejo/forgejo/issues/4718
This commit is contained in:
Earl Warren 2024-07-29 11:56:50 +02:00
parent 5bbc9ef97c
commit e6786db393
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
6 changed files with 188 additions and 24 deletions

View file

@ -939,6 +939,20 @@ func GetUserByIDs(ctx context.Context, ids []int64) ([]*User, error) {
return users, err
}
func IsValidUserID(id int64) bool {
return id > 0 || id == GhostUserID || id == ActionsUserID
}
func GetUserFromMap(id int64, idMap map[int64]*User) (int64, *User) {
if user, ok := idMap[id]; ok {
return id, user
}
if id == ActionsUserID {
return ActionsUserID, NewActionsUser()
}
return GhostUserID, NewGhostUser()
}
// GetPossibleUserByID returns the user if id > 0 or return system usrs if id < 0
func GetPossibleUserByID(ctx context.Context, id int64) (*User, error) {
switch id {

View file

@ -35,6 +35,39 @@ func TestOAuth2Application_LoadUser(t *testing.T) {
assert.NotNil(t, user)
}
func TestIsValidUserID(t *testing.T) {
assert.False(t, user_model.IsValidUserID(-30))
assert.False(t, user_model.IsValidUserID(0))
assert.True(t, user_model.IsValidUserID(user_model.GhostUserID))
assert.True(t, user_model.IsValidUserID(user_model.ActionsUserID))
assert.True(t, user_model.IsValidUserID(200))
}
func TestGetUserFromMap(t *testing.T) {
id := int64(200)
idMap := map[int64]*user_model.User{
id: {ID: id},
}
ghostID := int64(user_model.GhostUserID)
actionsID := int64(user_model.ActionsUserID)
actualID, actualUser := user_model.GetUserFromMap(-20, idMap)
assert.Equal(t, ghostID, actualID)
assert.Equal(t, ghostID, actualUser.ID)
actualID, actualUser = user_model.GetUserFromMap(0, idMap)
assert.Equal(t, ghostID, actualID)
assert.Equal(t, ghostID, actualUser.ID)
actualID, actualUser = user_model.GetUserFromMap(ghostID, idMap)
assert.Equal(t, ghostID, actualID)
assert.Equal(t, ghostID, actualUser.ID)
actualID, actualUser = user_model.GetUserFromMap(actionsID, idMap)
assert.Equal(t, actionsID, actualID)
assert.Equal(t, actionsID, actualUser.ID)
}
func TestGetUserByName(t *testing.T) {
defer tests.AddFixtures("models/user/fixtures/")()
assert.NoError(t, unittest.PrepareTestDatabase())