Skip to content

Commit a60f7c2

Browse files
committed
Fix tests
1 parent 2fdd7cb commit a60f7c2

File tree

9 files changed

+121
-30
lines changed

9 files changed

+121
-30
lines changed

integrations/api_team_test.go

Lines changed: 87 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ func TestAPITeam(t *testing.T) {
6767
resp = session.MakeRequest(t, req, http.StatusCreated)
6868
DecodeJSON(t, resp, &apiTeam)
6969
checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
70-
teamToCreate.Permission, teamToCreate.Units)
70+
teamToCreate.Permission, teamToCreate.Units, nil)
7171
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
72-
teamToCreate.Permission, teamToCreate.Units)
72+
teamToCreate.Permission, teamToCreate.Units, nil)
7373
teamID := apiTeam.ID
7474

7575
// Edit team.
@@ -87,9 +87,9 @@ func TestAPITeam(t *testing.T) {
8787
resp = session.MakeRequest(t, req, http.StatusOK)
8888
DecodeJSON(t, resp, &apiTeam)
8989
checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
90-
teamToEdit.Permission, teamToEdit.Units)
90+
teamToEdit.Permission, teamToEdit.Units, nil)
9191
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
92-
teamToEdit.Permission, teamToEdit.Units)
92+
teamToEdit.Permission, teamToEdit.Units, nil)
9393

9494
// Edit team Description only
9595
editDescription = "first team"
@@ -98,38 +98,108 @@ func TestAPITeam(t *testing.T) {
9898
resp = session.MakeRequest(t, req, http.StatusOK)
9999
DecodeJSON(t, resp, &apiTeam)
100100
checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
101-
teamToEdit.Permission, teamToEdit.Units)
101+
teamToEdit.Permission, teamToEdit.Units, nil)
102102
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
103-
teamToEdit.Permission, teamToEdit.Units)
103+
teamToEdit.Permission, teamToEdit.Units, nil)
104104

105105
// Read team.
106106
teamRead := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
107+
assert.NoError(t, teamRead.GetUnits())
107108
req = NewRequestf(t, "GET", "/api/v1/teams/%d?token="+token, teamID)
108109
resp = session.MakeRequest(t, req, http.StatusOK)
109110
DecodeJSON(t, resp, &apiTeam)
110111
checkTeamResponse(t, &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
111-
teamRead.Authorize.String(), teamRead.GetUnitNames())
112+
teamRead.Authorize.String(), teamRead.GetUnitNames(), teamRead.GetUnitsMap())
113+
114+
panic("")
115+
// Delete team.
116+
req = NewRequestf(t, "DELETE", "/api/v1/teams/%d?token="+token, teamID)
117+
session.MakeRequest(t, req, http.StatusNoContent)
118+
unittest.AssertNotExistsBean(t, &models.Team{ID: teamID})
119+
120+
// create team again via UnitsMap
121+
// Create team.
122+
teamToCreate = &api.CreateTeamOption{
123+
Name: "team2",
124+
Description: "team two",
125+
IncludesAllRepositories: true,
126+
Permission: "write",
127+
UnitsMap: map[string]string{"repo.code": "read", "repo.issues": "write", "repo.wiki": "none"},
128+
}
129+
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/orgs/%s/teams?token=%s", org.Name, token), teamToCreate)
130+
resp = session.MakeRequest(t, req, http.StatusCreated)
131+
DecodeJSON(t, resp, &apiTeam)
132+
checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
133+
teamToCreate.Permission, nil, teamToCreate.UnitsMap)
134+
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
135+
teamToCreate.Permission, nil, teamToCreate.UnitsMap)
136+
teamID = apiTeam.ID
137+
138+
// Edit team.
139+
editDescription = "team 1"
140+
editFalse = false
141+
teamToEdit = &api.EditTeamOption{
142+
Name: "teamtwo",
143+
Description: &editDescription,
144+
Permission: "write",
145+
IncludesAllRepositories: &editFalse,
146+
UnitsMap: map[string]string{"repo.code": "read", "repo.pulls": "read", "repo.releases": "write"},
147+
}
148+
149+
req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/teams/%d?token=%s", teamID, token), teamToEdit)
150+
resp = session.MakeRequest(t, req, http.StatusOK)
151+
DecodeJSON(t, resp, &apiTeam)
152+
checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
153+
teamToEdit.Permission, nil, teamToEdit.UnitsMap)
154+
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEdit.Description, *teamToEdit.IncludesAllRepositories,
155+
teamToEdit.Permission, nil, teamToEdit.UnitsMap)
156+
157+
// Edit team Description only
158+
editDescription = "second team"
159+
teamToEditDesc = api.EditTeamOption{Description: &editDescription}
160+
req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/teams/%d?token=%s", teamID, token), teamToEditDesc)
161+
resp = session.MakeRequest(t, req, http.StatusOK)
162+
DecodeJSON(t, resp, &apiTeam)
163+
checkTeamResponse(t, &apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
164+
teamToEdit.Permission, nil, teamToEdit.UnitsMap)
165+
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories,
166+
teamToEdit.Permission, nil, teamToEdit.UnitsMap)
167+
168+
// Read team.
169+
teamRead = unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
170+
req = NewRequestf(t, "GET", "/api/v1/teams/%d?token="+token, teamID)
171+
resp = session.MakeRequest(t, req, http.StatusOK)
172+
DecodeJSON(t, resp, &apiTeam)
173+
checkTeamResponse(t, &apiTeam, teamRead.Name, *teamToEditDesc.Description, teamRead.IncludesAllRepositories,
174+
teamRead.Authorize.String(), teamRead.GetUnitNames(), teamRead.GetUnitsMap())
112175

113176
// Delete team.
114177
req = NewRequestf(t, "DELETE", "/api/v1/teams/%d?token="+token, teamID)
115178
session.MakeRequest(t, req, http.StatusNoContent)
116179
unittest.AssertNotExistsBean(t, &models.Team{ID: teamID})
117180
}
118181

119-
func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string, includesAllRepositories bool, permission string, units []string) {
120-
assert.Equal(t, name, apiTeam.Name, "name")
121-
assert.Equal(t, description, apiTeam.Description, "description")
122-
assert.Equal(t, includesAllRepositories, apiTeam.IncludesAllRepositories, "includesAllRepositories")
123-
assert.Equal(t, permission, apiTeam.Permission, "permission")
124-
sort.StringSlice(units).Sort()
125-
sort.StringSlice(apiTeam.Units).Sort()
126-
assert.EqualValues(t, units, apiTeam.Units, "units")
182+
func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
183+
t.Run(name+description, func(t *testing.T) {
184+
assert.Equal(t, name, apiTeam.Name, "name")
185+
assert.Equal(t, description, apiTeam.Description, "description")
186+
assert.Equal(t, includesAllRepositories, apiTeam.IncludesAllRepositories, "includesAllRepositories")
187+
assert.Equal(t, permission, apiTeam.Permission, "permission")
188+
if units != nil {
189+
sort.StringSlice(units).Sort()
190+
sort.StringSlice(apiTeam.Units).Sort()
191+
assert.EqualValues(t, units, apiTeam.Units, "units")
192+
}
193+
if unitsMap != nil {
194+
assert.EqualValues(t, unitsMap, apiTeam.UnitsMap, "unitsMap")
195+
}
196+
})
127197
}
128198

129-
func checkTeamBean(t *testing.T, id int64, name, description string, includesAllRepositories bool, permission string, units []string) {
199+
func checkTeamBean(t *testing.T, id int64, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
130200
team := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: id}).(*models.Team)
131201
assert.NoError(t, team.GetUnits(), "GetUnits")
132-
checkTeamResponse(t, convert.ToTeam(team), name, description, includesAllRepositories, permission, units)
202+
checkTeamResponse(t, convert.ToTeam(team), name, description, includesAllRepositories, permission, units, unitsMap)
133203
}
134204

135205
type TeamSearchResults struct {

integrations/org_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ func TestOrgRestrictedUser(t *testing.T) {
156156
resp := adminSession.MakeRequest(t, req, http.StatusCreated)
157157
DecodeJSON(t, resp, &apiTeam)
158158
checkTeamResponse(t, &apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
159-
teamToCreate.Permission, teamToCreate.Units)
159+
teamToCreate.Permission, teamToCreate.Units, nil)
160160
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories,
161-
teamToCreate.Permission, teamToCreate.Units)
161+
teamToCreate.Permission, teamToCreate.Units, nil)
162162
//teamID := apiTeam.ID
163163

164164
// Now we need to add the restricted user to the team

models/issue.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2088,7 +2088,7 @@ func (issue *Issue) ResolveMentionsByVisibility(ctx context.Context, doer *user_
20882088
unittype = unit.TypePullRequests
20892089
}
20902090
for _, team := range teams {
2091-
if team.Authorize >= perm.AccessModeOwner {
2091+
if team.Authorize >= perm.AccessModeAdmin {
20922092
checked = append(checked, team.ID)
20932093
resolved[issue.Repo.Owner.LowerName+"/"+team.LowerName] = true
20942094
continue

models/org_team.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,15 @@ func (t *Team) GetUnitNames() (res []string) {
142142
return
143143
}
144144

145+
// GetUnitsMap returns the team units permissions
146+
func (t *Team) GetUnitsMap() map[string]string {
147+
var m = make(map[string]string)
148+
for _, u := range t.Units {
149+
m[u.Unit().NameKey] = u.Authorize.String()
150+
}
151+
return m
152+
}
153+
145154
// IsOwnerTeam returns true if team is owner team.
146155
func (t *Team) IsOwnerTeam() bool {
147156
return t.Name == ownerTeamName
@@ -652,7 +661,7 @@ func UpdateTeam(t *Team, authChanged, includeAllChanged bool) (err error) {
652661
Delete(new(TeamUnit)); err != nil {
653662
return err
654663
}
655-
if _, err = sess.Cols("org_id", "team_id", "type").Insert(&t.Units); err != nil {
664+
if _, err = sess.Cols("org_id", "team_id", "type", "authorize").Insert(&t.Units); err != nil {
656665
return err
657666
}
658667
}

models/perm/access_mode.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ func (mode AccessMode) ColorFormat(s fmt.State) {
5252
// ParseAccessMode returns corresponding access mode to given permission string.
5353
func ParseAccessMode(permission string) AccessMode {
5454
switch permission {
55+
case "read":
56+
return AccessModeRead
5557
case "write":
5658
return AccessModeWrite
5759
case "admin":
5860
return AccessModeAdmin
5961
default:
60-
return AccessModeRead
62+
return AccessModeNone
6163
}
6264
}
6365

models/repo_permission.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func getUserRepoPermission(e db.Engine, repo *Repository, user *user_model.User)
235235

236236
// if user in an owner team
237237
for _, team := range teams {
238-
if team.Authorize >= perm_model.AccessModeOwner {
238+
if team.Authorize >= perm_model.AccessModeAdmin {
239239
perm.AccessMode = perm_model.AccessModeOwner
240240
perm.UnitsMode = nil
241241
return

modules/convert/convert.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ func ToTeam(team *models.Team) *api.Team {
306306
CanCreateOrgRepo: team.CanCreateOrgRepo,
307307
Permission: team.Authorize.String(),
308308
Units: team.GetUnitNames(),
309+
UnitsMap: team.GetUnitsMap(),
309310
}
310311
}
311312

routers/api/v1/org/team.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ func ListUserTeams(ctx *context.APIContext) {
112112
apiOrg = convert.ToOrganization(org)
113113
cache[teams[i].OrgID] = apiOrg
114114
}
115+
if err := teams[i].GetUnits(); err != nil {
116+
ctx.Error(http.StatusInternalServerError, "teams[i].GetUnits()", err)
117+
return
118+
}
115119
apiTeams[i] = convert.ToTeam(teams[i])
116120
apiTeams[i].Organization = apiOrg
117121
}
@@ -138,6 +142,11 @@ func GetTeam(ctx *context.APIContext) {
138142
// "200":
139143
// "$ref": "#/responses/Team"
140144

145+
if err := ctx.Org.Team.GetUnits(); err != nil {
146+
ctx.Error(http.StatusInternalServerError, "team.GetUnits", err)
147+
return
148+
}
149+
141150
ctx.JSON(http.StatusOK, convert.ToTeam(ctx.Org.Team))
142151
}
143152

@@ -199,7 +208,7 @@ func CreateTeam(ctx *context.APIContext) {
199208
form := web.GetForm(ctx).(*api.CreateTeamOption)
200209

201210
var p = perm.ParseAccessMode(form.Permission)
202-
if p < perm.AccessModeOwner {
211+
if p < perm.AccessModeAdmin && len(form.UnitsMap) > 0 {
203212
p = perm.MinUnitPerms(convertUnitsMap(form.UnitsMap))
204213
}
205214

@@ -212,7 +221,7 @@ func CreateTeam(ctx *context.APIContext) {
212221
Authorize: p,
213222
}
214223

215-
if team.Authorize < perm.AccessModeOwner {
224+
if team.Authorize < perm.AccessModeAdmin {
216225
if len(form.UnitsMap) > 0 {
217226
attachTeamUnitsMap(team, form.UnitsMap)
218227
} else if len(form.Units) > 0 {
@@ -283,7 +292,7 @@ func EditTeam(ctx *context.APIContext) {
283292
if !team.IsOwnerTeam() && len(form.Permission) != 0 {
284293
// Validate permission level.
285294
var p = perm.ParseAccessMode(form.Permission)
286-
if p < perm.AccessModeOwner {
295+
if p < perm.AccessModeAdmin && len(form.UnitsMap) > 0 {
287296
p = perm.MinUnitPerms(convertUnitsMap(form.UnitsMap))
288297
}
289298

@@ -298,7 +307,7 @@ func EditTeam(ctx *context.APIContext) {
298307
}
299308
}
300309

301-
if team.Authorize < perm.AccessModeOwner {
310+
if team.Authorize < perm.AccessModeAdmin {
302311
if len(form.UnitsMap) > 0 {
303312
attachTeamUnitsMap(team, form.UnitsMap)
304313
} else if len(form.Units) > 0 {

routers/web/org/teams.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ func NewTeamPost(ctx *context.Context) {
248248
var includesAllRepositories = form.RepoAccess == "all"
249249
var unitPerms = getUnitPerms(ctx.Req.Form)
250250
var p = perm.ParseAccessMode(form.Permission)
251-
if p < perm.AccessModeOwner {
251+
if p < perm.AccessModeAdmin {
252252
p = perm.MinUnitPerms(unitPerms)
253253
}
254254

@@ -261,7 +261,7 @@ func NewTeamPost(ctx *context.Context) {
261261
CanCreateOrgRepo: form.CanCreateOrgRepo,
262262
}
263263

264-
if t.Authorize < perm.AccessModeOwner {
264+
if t.Authorize < perm.AccessModeAdmin {
265265
var units = make([]*models.TeamUnit, 0, len(unitPerms))
266266
for tp, perm := range unitPerms {
267267
units = append(units, &models.TeamUnit{
@@ -363,7 +363,7 @@ func EditTeamPost(ctx *context.Context) {
363363
}
364364
}
365365
t.Description = form.Description
366-
if t.Authorize < perm.AccessModeOwner {
366+
if t.Authorize < perm.AccessModeAdmin {
367367
var units = make([]models.TeamUnit, 0, len(unitPerms))
368368
for tp, perm := range unitPerms {
369369
units = append(units, models.TeamUnit{

0 commit comments

Comments
 (0)