mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 08:21:11 +00:00 
			
		
		
		
	[GITEA] enable system users for comment.LoadPoster
System users (Ghost, ActionsUser, etc) have a negative id and may be the author of a comment, either because it was created by a now deleted user or via an action using a transient token. The GetPossibleUserByID function has special cases related to system users and will not fail if given a negative id. Refs: https://codeberg.org/forgejo/forgejo/issues/1425 (cherry picked from commit97667e06b3) (cherry picked from commit8ef73a09c9) (cherry picked from commitfa8a00d264) (cherry picked from commit2ada2074b5) (cherry picked from commitf9a59b940a) (cherry picked from commitcd82834043) (cherry picked from commitaeb9a2c2b8)
This commit is contained in:
		
					parent
					
						
							
								503e3f7258
							
						
					
				
			
			
				commit
				
					
						0bfac925c2
					
				
			
		
					 2 changed files with 38 additions and 1 deletions
				
			
		| 
						 | 
					@ -342,7 +342,7 @@ func (c *Comment) AfterLoad(session *xorm.Session) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LoadPoster loads comment poster
 | 
					// LoadPoster loads comment poster
 | 
				
			||||||
func (c *Comment) LoadPoster(ctx context.Context) (err error) {
 | 
					func (c *Comment) LoadPoster(ctx context.Context) (err error) {
 | 
				
			||||||
	if c.PosterID <= 0 || c.Poster != nil {
 | 
						if c.Poster != nil {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -189,6 +189,43 @@ func TestAPIGetComment(t *testing.T) {
 | 
				
			||||||
	assert.Equal(t, expect.Created.Unix(), apiComment.Created.Unix())
 | 
						assert.Equal(t, expect.Created.Unix(), apiComment.Created.Unix())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPIGetSystemUserComment(t *testing.T) {
 | 
				
			||||||
 | 
						defer tests.PrepareTestEnv(t)()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{})
 | 
				
			||||||
 | 
						repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue.RepoID})
 | 
				
			||||||
 | 
						repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, systemUser := range []*user_model.User{
 | 
				
			||||||
 | 
							user_model.NewGhostUser(),
 | 
				
			||||||
 | 
							user_model.NewActionsUser(),
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							body := fmt.Sprintf("Hello %s", systemUser.Name)
 | 
				
			||||||
 | 
							comment, err := issues_model.CreateComment(db.DefaultContext, &issues_model.CreateCommentOptions{
 | 
				
			||||||
 | 
								Type:    issues_model.CommentTypeComment,
 | 
				
			||||||
 | 
								Doer:    systemUser,
 | 
				
			||||||
 | 
								Repo:    repo,
 | 
				
			||||||
 | 
								Issue:   issue,
 | 
				
			||||||
 | 
								Content: body,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues/comments/%d", repoOwner.Name, repo.Name, comment.ID)
 | 
				
			||||||
 | 
							resp := MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var apiComment api.Comment
 | 
				
			||||||
 | 
							DecodeJSON(t, resp, &apiComment)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if assert.NotNil(t, apiComment.Poster) {
 | 
				
			||||||
 | 
								if assert.Equal(t, systemUser.ID, apiComment.Poster.ID) {
 | 
				
			||||||
 | 
									assert.NoError(t, comment.LoadPoster(db.DefaultContext))
 | 
				
			||||||
 | 
									assert.Equal(t, systemUser.Name, apiComment.Poster.UserName)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							assert.Equal(t, body, apiComment.Body)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIEditComment(t *testing.T) {
 | 
					func TestAPIEditComment(t *testing.T) {
 | 
				
			||||||
	defer tests.PrepareTestEnv(t)()
 | 
						defer tests.PrepareTestEnv(t)()
 | 
				
			||||||
	const newCommentBody = "This is the new comment body"
 | 
						const newCommentBody = "This is the new comment body"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue