mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +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)
This commit is contained in:
		
					parent
					
						
							
								45b922ae76
							
						
					
				
			
			
				commit
				
					
						cd82834043
					
				
			
		
					 2 changed files with 38 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -342,7 +342,7 @@ func (c *Comment) AfterLoad(session *xorm.Session) {
 | 
			
		|||
 | 
			
		||||
// LoadPoster loads comment poster
 | 
			
		||||
func (c *Comment) LoadPoster(ctx context.Context) (err error) {
 | 
			
		||||
	if c.PosterID <= 0 || c.Poster != nil {
 | 
			
		||||
	if c.Poster != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -189,6 +189,43 @@ func TestAPIGetComment(t *testing.T) {
 | 
			
		|||
	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) {
 | 
			
		||||
	defer tests.PrepareTestEnv(t)()
 | 
			
		||||
	const newCommentBody = "This is the new comment body"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue