diff --git a/models/issues/comment.go b/models/issues/comment.go index dc38f83f79..c44f65e29c 100644 --- a/models/issues/comment.go +++ b/models/issues/comment.go @@ -652,8 +652,11 @@ func (c *Comment) LoadAssigneeUserAndTeam(ctx context.Context) error { if c.Issue.Repo.Owner.IsOrganization() { c.AssigneeTeam, err = organization.GetTeamByID(ctx, c.AssigneeTeamID) - if err != nil && !organization.IsErrTeamNotExist(err) { - return err + if err != nil { + if !organization.IsErrTeamNotExist(err) { + return err + } + c.AssigneeTeam = organization.NewGhostTeam() } } } diff --git a/models/organization/team.go b/models/organization/team.go index 450082077f..c78eff39fb 100644 --- a/models/organization/team.go +++ b/models/organization/team.go @@ -292,3 +292,11 @@ func FixInconsistentOwnerTeams(ctx context.Context) (int64, error) { return int64(len(teamIDs)), nil } + +func NewGhostTeam() *Team { + return &Team{ + ID: -1, + Name: "Ghost team", + LowerName: "ghost team", + } +} diff --git a/routers/web/repo/action_aggregator_test.go b/routers/web/repo/action_aggregator_test.go index 385cf5cbe5..94e6d506c5 100644 --- a/routers/web/repo/action_aggregator_test.go +++ b/routers/web/repo/action_aggregator_test.go @@ -94,6 +94,14 @@ func reqReview(t int64, name string, delReq bool) *issue_model.Comment { return c } +func ghostReqReview(t, id int64) *issue_model.Comment { + c := testComment(t) + c.Type = issue_model.CommentTypeReviewRequest + c.AssigneeTeam = organization.NewGhostTeam() + c.AssigneeTeamID = id + return c +} + func reqReviewList(t int64, del bool, names ...string) *issue_model.Comment { req := []issue_model.RequestReviewTarget{} for _, name := range names { @@ -588,6 +596,27 @@ func TestCombineReviewRequests(t *testing.T) { reqReviewList(121, true, "titi", "toto-team"), }, }, + + // Ghost. + { + name: "ghost reviews", + beforeCombined: []*issue_model.Comment{ + reqReview(1, "titi", false), + ghostReqReview(2, 50), + ghostReqReview(3, 51), + ghostReqReview(4, 50), + }, + afterCombined: []*issue_model.Comment{ + { + PosterID: 1, + Type: issue_model.CommentTypeReviewRequest, + CreatedUnix: timeutil.TimeStamp(1), + AddedRequestReview: []issue_model.RequestReviewTarget{ + createReqReviewTarget("titi"), {Team: organization.NewGhostTeam()}, + }, + }, + }, + }, } for _, kase := range kases {