mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Fix empty project displayed in issue sidebar (#25802)
Before:  After:  This issue comes from the change in #25468. `LoadProject` will always return at least one record, so we use `ProjectID` to check whether an issue is linked to a project in the old code. As other `issue.LoadXXX` functions, we need to check the return value from `xorm.Session.Get`. In recent unit tests, we only test `issueList.LoadAttributes()` but don't test `issue.LoadAttributes()`. So I added a new test for `issue.LoadAttributes()` in this PR. --------- Co-authored-by: Denys Konovalov <privat@denyskon.de>
This commit is contained in:
		| @@ -67,9 +67,7 @@ func TestIssueList_LoadAttributes(t *testing.T) { | |||||||
| 		if issue.ID == int64(1) { | 		if issue.ID == int64(1) { | ||||||
| 			assert.Equal(t, int64(400), issue.TotalTrackedTime) | 			assert.Equal(t, int64(400), issue.TotalTrackedTime) | ||||||
| 			assert.NotNil(t, issue.Project) | 			assert.NotNil(t, issue.Project) | ||||||
| 		} else if issue.ID == int64(2) { | 			assert.Equal(t, int64(1), issue.Project.ID) | ||||||
| 			assert.Equal(t, int64(3682), issue.TotalTrackedTime) |  | ||||||
| 			assert.Nil(t, issue.Project) |  | ||||||
| 		} else { | 		} else { | ||||||
| 			assert.Nil(t, issue.Project) | 			assert.Nil(t, issue.Project) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -16,13 +16,14 @@ import ( | |||||||
| func (issue *Issue) LoadProject(ctx context.Context) (err error) { | func (issue *Issue) LoadProject(ctx context.Context) (err error) { | ||||||
| 	if issue.Project == nil { | 	if issue.Project == nil { | ||||||
| 		var p project_model.Project | 		var p project_model.Project | ||||||
| 		if _, err = db.GetEngine(ctx).Table("project"). | 		has, err := db.GetEngine(ctx).Table("project"). | ||||||
| 			Join("INNER", "project_issue", "project.id=project_issue.project_id"). | 			Join("INNER", "project_issue", "project.id=project_issue.project_id"). | ||||||
| 			Where("project_issue.issue_id = ?", issue.ID). | 			Where("project_issue.issue_id = ?", issue.ID).Get(&p) | ||||||
| 			Get(&p); err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
|  | 		} else if has { | ||||||
|  | 			issue.Project = &p | ||||||
| 		} | 		} | ||||||
| 		issue.Project = &p |  | ||||||
| 	} | 	} | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ import ( | |||||||
| 	repo_model "code.gitea.io/gitea/models/repo" | 	repo_model "code.gitea.io/gitea/models/repo" | ||||||
| 	"code.gitea.io/gitea/models/unittest" | 	"code.gitea.io/gitea/models/unittest" | ||||||
| 	user_model "code.gitea.io/gitea/models/user" | 	user_model "code.gitea.io/gitea/models/user" | ||||||
|  | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/util" | 	"code.gitea.io/gitea/modules/util" | ||||||
|  |  | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| @@ -539,3 +540,47 @@ func TestCountIssues(t *testing.T) { | |||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 	assert.EqualValues(t, 18, count) | 	assert.EqualValues(t, 18, count) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestIssueLoadAttributes(t *testing.T) { | ||||||
|  | 	assert.NoError(t, unittest.PrepareTestDatabase()) | ||||||
|  | 	setting.Service.EnableTimetracking = true | ||||||
|  |  | ||||||
|  | 	issueList := issues_model.IssueList{ | ||||||
|  | 		unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}), | ||||||
|  | 		unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 4}), | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for _, issue := range issueList { | ||||||
|  | 		assert.NoError(t, issue.LoadAttributes(db.DefaultContext)) | ||||||
|  | 		assert.EqualValues(t, issue.RepoID, issue.Repo.ID) | ||||||
|  | 		for _, label := range issue.Labels { | ||||||
|  | 			assert.EqualValues(t, issue.RepoID, label.RepoID) | ||||||
|  | 			unittest.AssertExistsAndLoadBean(t, &issues_model.IssueLabel{IssueID: issue.ID, LabelID: label.ID}) | ||||||
|  | 		} | ||||||
|  | 		if issue.PosterID > 0 { | ||||||
|  | 			assert.EqualValues(t, issue.PosterID, issue.Poster.ID) | ||||||
|  | 		} | ||||||
|  | 		if issue.AssigneeID > 0 { | ||||||
|  | 			assert.EqualValues(t, issue.AssigneeID, issue.Assignee.ID) | ||||||
|  | 		} | ||||||
|  | 		if issue.MilestoneID > 0 { | ||||||
|  | 			assert.EqualValues(t, issue.MilestoneID, issue.Milestone.ID) | ||||||
|  | 		} | ||||||
|  | 		if issue.IsPull { | ||||||
|  | 			assert.EqualValues(t, issue.ID, issue.PullRequest.IssueID) | ||||||
|  | 		} | ||||||
|  | 		for _, attachment := range issue.Attachments { | ||||||
|  | 			assert.EqualValues(t, issue.ID, attachment.IssueID) | ||||||
|  | 		} | ||||||
|  | 		for _, comment := range issue.Comments { | ||||||
|  | 			assert.EqualValues(t, issue.ID, comment.IssueID) | ||||||
|  | 		} | ||||||
|  | 		if issue.ID == int64(1) { | ||||||
|  | 			assert.Equal(t, int64(400), issue.TotalTrackedTime) | ||||||
|  | 			assert.NotNil(t, issue.Project) | ||||||
|  | 			assert.Equal(t, int64(1), issue.Project.ID) | ||||||
|  | 		} else { | ||||||
|  | 			assert.Nil(t, issue.Project) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -438,8 +438,7 @@ func UpdateIssueProject(ctx *context.Context) { | |||||||
| 	projectID := ctx.FormInt64("id") | 	projectID := ctx.FormInt64("id") | ||||||
| 	for _, issue := range issues { | 	for _, issue := range issues { | ||||||
| 		if issue.Project != nil { | 		if issue.Project != nil { | ||||||
| 			oldProjectID := issue.Project.ID | 			if issue.Project.ID == projectID { | ||||||
| 			if oldProjectID == projectID { |  | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -386,8 +386,7 @@ func UpdateIssueProject(ctx *context.Context) { | |||||||
| 	projectID := ctx.FormInt64("id") | 	projectID := ctx.FormInt64("id") | ||||||
| 	for _, issue := range issues { | 	for _, issue := range issues { | ||||||
| 		if issue.Project != nil { | 		if issue.Project != nil { | ||||||
| 			oldProjectID := issue.Project.ID | 			if issue.Project.ID == projectID { | ||||||
| 			if oldProjectID == projectID { |  | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user