aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--integrations/api_team_test.go24
-rw-r--r--integrations/org_test.go2
-rw-r--r--modules/convert/convert.go57
-rw-r--r--modules/convert/issue_comment.go2
-rw-r--r--modules/convert/pull_review.go7
-rw-r--r--modules/convert/repository.go5
-rw-r--r--routers/api/v1/org/team.go72
-rw-r--r--routers/api/v1/repo/teams.go19
-rw-r--r--routers/web/org/teams.go20
9 files changed, 110 insertions, 98 deletions
diff --git a/integrations/api_team_test.go b/integrations/api_team_test.go
index 412fd4c73d..d571342c3d 100644
--- a/integrations/api_team_test.go
+++ b/integrations/api_team_test.go
@@ -69,7 +69,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusCreated)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
+ checkTeamResponse(t, "CreateTeam1", &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
teamToCreate.Permission, teamToCreate.Units, nil)
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
teamToCreate.Permission, teamToCreate.Units, nil)
@@ -90,7 +90,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusOK)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
+ checkTeamResponse(t, "EditTeam1", &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
teamToEdit.Permission, unit.AllUnitKeyNames(), nil)
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
teamToEdit.Permission, unit.AllUnitKeyNames(), nil)
@@ -102,7 +102,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusOK)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
+ checkTeamResponse(t, "EditTeam1_DescOnly", &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
teamToEdit.Permission, unit.AllUnitKeyNames(), nil)
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
teamToEdit.Permission, unit.AllUnitKeyNames(), nil)
@@ -114,7 +114,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusOK)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
+ checkTeamResponse(t, "ReadTeam1", &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
teamRead.AccessMode.String(), teamRead.GetUnitNames(), teamRead.GetUnitsMap())
// Delete team.
@@ -135,7 +135,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusCreated)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
+ checkTeamResponse(t, "CreateTeam2", &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
"read", nil, teamToCreate.UnitsMap)
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
"read", nil, teamToCreate.UnitsMap)
@@ -156,7 +156,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusOK)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
+ checkTeamResponse(t, "EditTeam2", &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
"read", nil, teamToEdit.UnitsMap)
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
"read", nil, teamToEdit.UnitsMap)
@@ -168,7 +168,7 @@ func TestAPITeam(t *testing.T) {
resp = session.MakeRequest(t, req, http.StatusOK)
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
+ checkTeamResponse(t, "EditTeam2_DescOnly", &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
"read", nil, teamToEdit.UnitsMap)
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
"read", nil, teamToEdit.UnitsMap)
@@ -180,7 +180,7 @@ func TestAPITeam(t *testing.T) {
apiTeam = api.Team{}
DecodeJSON(t, resp, &apiTeam)
assert.NoError(t, teamRead.GetUnits())
- checkTeamResponse(t, &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
+ checkTeamResponse(t, "ReadTeam2", &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
teamRead.AccessMode.String(), teamRead.GetUnitNames(), teamRead.GetUnitsMap())
// Delete team.
@@ -189,8 +189,8 @@ func TestAPITeam(t *testing.T) {
unittest.AssertNotExistsBean(t, &organization.Team{ID: teamID})
}
-func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
- t.Run(name+description, func(t *testing.T) {
+func checkTeamResponse(t *testing.T, testName string, apiTeam *api.Team, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
+ t.Run(testName, func(t *testing.T) {
assert.Equal(t, name, apiTeam.Name, "name")
assert.Equal(t, description, apiTeam.Description, "description")
assert.Equal(t, includesAllRepositories, apiTeam.IncludesAllRepositories, "includesAllRepositories")
@@ -209,7 +209,9 @@ func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string
func checkTeamBean(t *testing.T, id int64, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: id}).(*organization.Team)
assert.NoError(t, team.GetUnits(), "GetUnits")
- checkTeamResponse(t, convert.ToTeam(team), name, description, includesAllRepositories, permission, units, unitsMap)
+ apiTeam, err := convert.ToTeam(team)
+ assert.NoError(t, err)
+ checkTeamResponse(t, fmt.Sprintf("checkTeamBean/%s_%s", name, description), apiTeam, name, description, includesAllRepositories, permission, units, unitsMap)
}
type TeamSearchResults struct {
diff --git a/integrations/org_test.go b/integrations/org_test.go
index 227a1b8d40..d755385726 100644
--- a/integrations/org_test.go
+++ b/integrations/org_test.go
@@ -157,7 +157,7 @@ func TestOrgRestrictedUser(t *testing.T) {
resp := adminSession.MakeRequest(t, req, http.StatusCreated)
DecodeJSON(t, resp, &apiTeam)
- checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
+ checkTeamResponse(t, "CreateTeam_codereader", &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
teamToCreate.Permission, teamToCreate.Units, nil)
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
teamToCreate.Permission, teamToCreate.Units, nil)
diff --git a/modules/convert/convert.go b/modules/convert/convert.go
index 74ede47cef..53357e7505 100644
--- a/modules/convert/convert.go
+++ b/modules/convert/convert.go
@@ -304,22 +304,53 @@ func ToOrganization(org *organization.Organization) *api.Organization {
}
}
-// ToTeam convert organization.Team to api.Team
-func ToTeam(team *organization.Team) *api.Team {
- if team == nil {
- return nil
+// ToTeam convert models.Team to api.Team
+func ToTeam(team *organization.Team, loadOrg ...bool) (*api.Team, error) {
+ teams, err := ToTeams([]*organization.Team{team}, len(loadOrg) != 0 && loadOrg[0])
+ if err != nil || len(teams) == 0 {
+ return nil, err
+ }
+ return teams[0], nil
+}
+
+// ToTeams convert models.Team list to api.Team list
+func ToTeams(teams []*organization.Team, loadOrgs bool) ([]*api.Team, error) {
+ if len(teams) == 0 || teams[0] == nil {
+ return nil, nil
}
- return &api.Team{
- ID: team.ID,
- Name: team.Name,
- Description: team.Description,
- IncludesAllRepositories: team.IncludesAllRepositories,
- CanCreateOrgRepo: team.CanCreateOrgRepo,
- Permission: team.AccessMode.String(),
- Units: team.GetUnitNames(),
- UnitsMap: team.GetUnitsMap(),
+ cache := make(map[int64]*api.Organization)
+ apiTeams := make([]*api.Team, len(teams))
+ for i := range teams {
+ if err := teams[i].GetUnits(); err != nil {
+ return nil, err
+ }
+
+ apiTeams[i] = &api.Team{
+ ID: teams[i].ID,
+ Name: teams[i].Name,
+ Description: teams[i].Description,
+ IncludesAllRepositories: teams[i].IncludesAllRepositories,
+ CanCreateOrgRepo: teams[i].CanCreateOrgRepo,
+ Permission: teams[i].AccessMode.String(),
+ Units: teams[i].GetUnitNames(),
+ UnitsMap: teams[i].GetUnitsMap(),
+ }
+
+ if loadOrgs {
+ apiOrg, ok := cache[teams[i].OrgID]
+ if !ok {
+ org, err := organization.GetOrgByID(teams[i].OrgID)
+ if err != nil {
+ return nil, err
+ }
+ apiOrg = ToOrganization(org)
+ cache[teams[i].OrgID] = apiOrg
+ }
+ apiTeams[i].Organization = apiOrg
+ }
}
+ return apiTeams, nil
}
// ToAnnotatedTag convert git.Tag to api.AnnotatedTag
diff --git a/modules/convert/issue_comment.go b/modules/convert/issue_comment.go
index caba2b506e..6d72849bca 100644
--- a/modules/convert/issue_comment.go
+++ b/modules/convert/issue_comment.go
@@ -152,7 +152,7 @@ func ToTimelineComment(c *models.Comment, doer *user_model.User) *api.TimelineCo
comment.Assignee = ToUser(c.Assignee, nil)
}
if c.AssigneeTeam != nil {
- comment.AssigneeTeam = ToTeam(c.AssigneeTeam)
+ comment.AssigneeTeam, _ = ToTeam(c.AssigneeTeam)
}
if c.ResolveDoer != nil {
diff --git a/modules/convert/pull_review.go b/modules/convert/pull_review.go
index 962aae58bb..907ccafb66 100644
--- a/modules/convert/pull_review.go
+++ b/modules/convert/pull_review.go
@@ -22,10 +22,15 @@ func ToPullReview(ctx context.Context, r *models.Review, doer *user_model.User)
r.Reviewer = user_model.NewGhostUser()
}
+ apiTeam, err := ToTeam(r.ReviewerTeam)
+ if err != nil {
+ return nil, err
+ }
+
result := &api.PullReview{
ID: r.ID,
Reviewer: ToUser(r.Reviewer, doer),
- ReviewerTeam: ToTeam(r.ReviewerTeam),
+ ReviewerTeam: apiTeam,
State: api.ReviewStateUnknown,
Body: r.Content,
CommitID: r.CommitID,
diff --git a/modules/convert/repository.go b/modules/convert/repository.go
index 1f11fda7ac..b813d69699 100644
--- a/modules/convert/repository.go
+++ b/modules/convert/repository.go
@@ -186,10 +186,7 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo
// ToRepoTransfer convert a models.RepoTransfer to a structs.RepeTransfer
func ToRepoTransfer(t *models.RepoTransfer) *api.RepoTransfer {
- var teams []*api.Team
- for _, v := range t.Teams {
- teams = append(teams, ToTeam(v))
- }
+ teams, _ := ToTeams(t.Teams, false)
return &api.RepoTransfer{
Doer: ToUser(t.Doer, nil),
diff --git a/routers/api/v1/org/team.go b/routers/api/v1/org/team.go
index d54ed5bb31..f8c37303d6 100644
--- a/routers/api/v1/org/team.go
+++ b/routers/api/v1/org/team.go
@@ -58,14 +58,10 @@ func ListTeams(ctx *context.APIContext) {
return
}
- apiTeams := make([]*api.Team, len(teams))
- for i := range teams {
- if err := teams[i].GetUnits(); err != nil {
- ctx.Error(http.StatusInternalServerError, "GetUnits", err)
- return
- }
-
- apiTeams[i] = convert.ToTeam(teams[i])
+ apiTeams, err := convert.ToTeams(teams, false)
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err)
+ return
}
ctx.SetTotalCountHeader(count)
@@ -101,25 +97,10 @@ func ListUserTeams(ctx *context.APIContext) {
return
}
- cache := make(map[int64]*api.Organization)
- apiTeams := make([]*api.Team, len(teams))
- for i := range teams {
- apiOrg, ok := cache[teams[i].OrgID]
- if !ok {
- org, err := organization.GetOrgByID(teams[i].OrgID)
- if err != nil {
- ctx.Error(http.StatusInternalServerError, "GetUserByID", err)
- return
- }
- apiOrg = convert.ToOrganization(org)
- cache[teams[i].OrgID] = apiOrg
- }
- if err := teams[i].GetUnits(); err != nil {
- ctx.Error(http.StatusInternalServerError, "teams[i].GetUnits()", err)
- return
- }
- apiTeams[i] = convert.ToTeam(teams[i])
- apiTeams[i].Organization = apiOrg
+ apiTeams, err := convert.ToTeams(teams, true)
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err)
+ return
}
ctx.SetTotalCountHeader(count)
@@ -144,12 +125,13 @@ func GetTeam(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/Team"
- if err := ctx.Org.Team.GetUnits(); err != nil {
- ctx.Error(http.StatusInternalServerError, "team.GetUnits", err)
+ apiTeam, err := convert.ToTeam(ctx.Org.Team)
+ if err != nil {
+ ctx.InternalServerError(err)
return
}
- ctx.JSON(http.StatusOK, convert.ToTeam(ctx.Org.Team))
+ ctx.JSON(http.StatusOK, apiTeam)
}
func attachTeamUnits(team *organization.Team, units []string) {
@@ -241,7 +223,12 @@ func CreateTeam(ctx *context.APIContext) {
return
}
- ctx.JSON(http.StatusCreated, convert.ToTeam(team))
+ apiTeam, err := convert.ToTeam(team)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+ ctx.JSON(http.StatusCreated, apiTeam)
}
// EditTeam api for edit a team
@@ -318,7 +305,13 @@ func EditTeam(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "EditTeam", err)
return
}
- ctx.JSON(http.StatusOK, convert.ToTeam(team))
+
+ apiTeam, err := convert.ToTeam(team)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+ ctx.JSON(http.StatusOK, apiTeam)
}
// DeleteTeam api for delete a team
@@ -782,17 +775,10 @@ func SearchTeam(ctx *context.APIContext) {
return
}
- apiTeams := make([]*api.Team, len(teams))
- for i := range teams {
- if err := teams[i].GetUnits(); err != nil {
- log.Error("Team GetUnits failed: %v", err)
- ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
- "ok": false,
- "error": "SearchTeam failed to get units",
- })
- return
- }
- apiTeams[i] = convert.ToTeam(teams[i])
+ apiTeams, err := convert.ToTeams(teams, false)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
}
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
diff --git a/routers/api/v1/repo/teams.go b/routers/api/v1/repo/teams.go
index 1e3ea326d3..e414d8b60e 100644
--- a/routers/api/v1/repo/teams.go
+++ b/routers/api/v1/repo/teams.go
@@ -12,7 +12,6 @@ import (
"code.gitea.io/gitea/models/organization"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/convert"
- api "code.gitea.io/gitea/modules/structs"
)
// ListTeams list a repository's teams
@@ -48,14 +47,10 @@ func ListTeams(ctx *context.APIContext) {
return
}
- apiTeams := make([]*api.Team, len(teams))
- for i := range teams {
- if err := teams[i].GetUnits(); err != nil {
- ctx.Error(http.StatusInternalServerError, "GetUnits", err)
- return
- }
-
- apiTeams[i] = convert.ToTeam(teams[i])
+ apiTeams, err := convert.ToTeams(teams, false)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
}
ctx.JSON(http.StatusOK, apiTeams)
@@ -103,11 +98,11 @@ func IsTeam(ctx *context.APIContext) {
}
if models.HasRepository(team, ctx.Repo.Repository.ID) {
- if err := team.GetUnits(); err != nil {
- ctx.Error(http.StatusInternalServerError, "GetUnits", err)
+ apiTeam, err := convert.ToTeam(team)
+ if err != nil {
+ ctx.InternalServerError(err)
return
}
- apiTeam := convert.ToTeam(team)
ctx.JSON(http.StatusOK, apiTeam)
return
}
diff --git a/routers/web/org/teams.go b/routers/web/org/teams.go
index 31bfaea92f..3689ffe93d 100644
--- a/routers/web/org/teams.go
+++ b/routers/web/org/teams.go
@@ -23,7 +23,6 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/convert"
"code.gitea.io/gitea/modules/log"
- api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/routers/utils"
"code.gitea.io/gitea/services/forms"
@@ -357,17 +356,14 @@ func SearchTeam(ctx *context.Context) {
return
}
- apiTeams := make([]*api.Team, len(teams))
- for i := range teams {
- if err := teams[i].GetUnits(); err != nil {
- log.Error("Team GetUnits failed: %v", err)
- ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
- "ok": false,
- "error": "SearchTeam failed to get units",
- })
- return
- }
- apiTeams[i] = convert.ToTeam(teams[i])
+ apiTeams, err := convert.ToTeams(teams, false)
+ if err != nil {
+ log.Error("convert ToTeams failed: %v", err)
+ ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
+ "ok": false,
+ "error": "SearchTeam failed to get units",
+ })
+ return
}
ctx.SetTotalCountHeader(maxResults)