@@ -22,6 +22,7 @@ import (
22
22
"code.gitea.io/gitea/tests"
23
23
24
24
"github.com/stretchr/testify/assert"
25
+ "github.com/stretchr/testify/require"
25
26
)
26
27
27
28
func TestAPIOrgCreateRename (t * testing.T ) {
@@ -110,121 +111,142 @@ func TestAPIOrgCreateRename(t *testing.T) {
110
111
})
111
112
}
112
113
113
- func TestAPIOrgEdit (t * testing.T ) {
114
+ func TestAPIOrgGeneral (t * testing.T ) {
114
115
defer tests .PrepareTestEnv (t )()
115
- session := loginUser (t , "user1" )
116
-
117
- token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteOrganization )
118
- org := api.EditOrgOption {
119
- FullName : "Org3 organization new full name" ,
120
- Description : "A new description" ,
121
- Website : "https://try.gitea.io/new" ,
122
- Location : "Beijing" ,
123
- Visibility : "private" ,
124
- }
125
- req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).
126
- AddTokenAuth (token )
127
- resp := MakeRequest (t , req , http .StatusOK )
116
+ user1Session := loginUser (t , "user1" )
117
+ user1Token := getTokenForLoggedInUser (t , user1Session , auth_model .AccessTokenScopeWriteOrganization )
118
+
119
+ t .Run ("OrgGetAll" , func (t * testing.T ) {
120
+ // accessing with a token will return all orgs
121
+ req := NewRequest (t , "GET" , "/api/v1/orgs" ).AddTokenAuth (user1Token )
122
+ resp := MakeRequest (t , req , http .StatusOK )
123
+ var apiOrgList []* api.Organization
124
+
125
+ DecodeJSON (t , resp , & apiOrgList )
126
+ assert .Len (t , apiOrgList , 13 )
127
+ assert .Equal (t , "Limited Org 36" , apiOrgList [1 ].FullName )
128
+ assert .Equal (t , "limited" , apiOrgList [1 ].Visibility )
129
+
130
+ // accessing without a token will return only public orgs
131
+ req = NewRequest (t , "GET" , "/api/v1/orgs" )
132
+ resp = MakeRequest (t , req , http .StatusOK )
128
133
129
- var apiOrg api.Organization
130
- DecodeJSON (t , resp , & apiOrg )
134
+ DecodeJSON (t , resp , & apiOrgList )
135
+ assert .Len (t , apiOrgList , 9 )
136
+ assert .Equal (t , "org 17" , apiOrgList [0 ].FullName )
137
+ assert .Equal (t , "public" , apiOrgList [0 ].Visibility )
138
+ })
131
139
132
- assert .Equal (t , "org3" , apiOrg .Name )
133
- assert .Equal (t , org .FullName , apiOrg .FullName )
134
- assert .Equal (t , org .Description , apiOrg .Description )
135
- assert .Equal (t , org .Website , apiOrg .Website )
136
- assert .Equal (t , org .Location , apiOrg .Location )
137
- assert .Equal (t , org .Visibility , apiOrg .Visibility )
138
- }
140
+ t .Run ("OrgEdit" , func (t * testing.T ) {
141
+ org := api.EditOrgOption {
142
+ FullName : "Org3 organization new full name" ,
143
+ Description : "A new description" ,
144
+ Website : "https://try.gitea.io/new" ,
145
+ Location : "Beijing" ,
146
+ Visibility : "private" ,
147
+ }
148
+ req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).AddTokenAuth (user1Token )
149
+ resp := MakeRequest (t , req , http .StatusOK )
150
+
151
+ var apiOrg api.Organization
152
+ DecodeJSON (t , resp , & apiOrg )
153
+
154
+ assert .Equal (t , "org3" , apiOrg .Name )
155
+ assert .Equal (t , org .FullName , apiOrg .FullName )
156
+ assert .Equal (t , org .Description , apiOrg .Description )
157
+ assert .Equal (t , org .Website , apiOrg .Website )
158
+ assert .Equal (t , org .Location , apiOrg .Location )
159
+ assert .Equal (t , org .Visibility , apiOrg .Visibility )
160
+ })
139
161
140
- func TestAPIOrgEditBadVisibility (t * testing.T ) {
141
- defer tests .PrepareTestEnv (t )()
142
- session := loginUser (t , "user1" )
143
-
144
- token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteOrganization )
145
- org := api.EditOrgOption {
146
- FullName : "Org3 organization new full name" ,
147
- Description : "A new description" ,
148
- Website : "https://try.gitea.io/new" ,
149
- Location : "Beijing" ,
150
- Visibility : "badvisibility" ,
151
- }
152
- req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).
153
- AddTokenAuth (token )
154
- MakeRequest (t , req , http .StatusUnprocessableEntity )
155
- }
162
+ t .Run ("OrgEditBadVisibility" , func (t * testing.T ) {
163
+ org := api.EditOrgOption {
164
+ FullName : "Org3 organization new full name" ,
165
+ Description : "A new description" ,
166
+ Website : "https://try.gitea.io/new" ,
167
+ Location : "Beijing" ,
168
+ Visibility : "badvisibility" ,
169
+ }
170
+ req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).AddTokenAuth (user1Token )
171
+ MakeRequest (t , req , http .StatusUnprocessableEntity )
172
+ })
156
173
157
- func TestAPIOrgDeny (t * testing.T ) {
158
- defer tests .PrepareTestEnv (t )()
159
- defer test .MockVariableValue (& setting .Service .RequireSignInViewStrict , true )()
174
+ t .Run ("OrgDeny" , func (t * testing.T ) {
175
+ defer test .MockVariableValue (& setting .Service .RequireSignInViewStrict , true )()
160
176
161
- orgName := "user1_org"
162
- req := NewRequestf (t , "GET" , "/api/v1/orgs/%s" , orgName )
163
- MakeRequest (t , req , http .StatusNotFound )
177
+ orgName := "user1_org"
178
+ req := NewRequestf (t , "GET" , "/api/v1/orgs/%s" , orgName )
179
+ MakeRequest (t , req , http .StatusNotFound )
164
180
165
- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , orgName )
166
- MakeRequest (t , req , http .StatusNotFound )
181
+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , orgName )
182
+ MakeRequest (t , req , http .StatusNotFound )
167
183
168
- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/members" , orgName )
169
- MakeRequest (t , req , http .StatusNotFound )
170
- }
184
+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/members" , orgName )
185
+ MakeRequest (t , req , http .StatusNotFound )
186
+ })
171
187
172
- func TestAPIGetAll (t * testing.T ) {
173
- defer tests .PrepareTestEnv (t )()
174
- token := getUserToken (t , "user1" , auth_model .AccessTokenScopeReadOrganization )
188
+ t .Run ("OrgSearchEmptyTeam" , func (t * testing.T ) {
189
+ orgName := "org_with_empty_team"
190
+ // create org
191
+ req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & api.CreateOrgOption {
192
+ UserName : orgName ,
193
+ }).AddTokenAuth (user1Token )
194
+ MakeRequest (t , req , http .StatusCreated )
195
+
196
+ // create team with no member
197
+ req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/orgs/%s/teams" , orgName ), & api.CreateTeamOption {
198
+ Name : "Empty" ,
199
+ IncludesAllRepositories : true ,
200
+ Permission : "read" ,
201
+ Units : []string {"repo.code" , "repo.issues" , "repo.ext_issues" , "repo.wiki" , "repo.pulls" },
202
+ }).AddTokenAuth (user1Token )
203
+ MakeRequest (t , req , http .StatusCreated )
204
+
205
+ // case-insensitive search for teams that have no members
206
+ req = NewRequest (t , "GET" , fmt .Sprintf ("/api/v1/orgs/%s/teams/search?q=%s" , orgName , "empty" )).
207
+ AddTokenAuth (user1Token )
208
+ resp := MakeRequest (t , req , http .StatusOK )
209
+ data := struct {
210
+ Ok bool
211
+ Data []* api.Team
212
+ }{}
213
+ DecodeJSON (t , resp , & data )
214
+ assert .True (t , data .Ok )
215
+ if assert .Len (t , data .Data , 1 ) {
216
+ assert .Equal (t , "Empty" , data .Data [0 ].Name )
217
+ }
218
+ })
175
219
176
- // accessing with a token will return all orgs
177
- req := NewRequest (t , "GET" , "/api/v1/orgs" ).
178
- AddTokenAuth (token )
179
- resp := MakeRequest (t , req , http .StatusOK )
180
- var apiOrgList []* api.Organization
220
+ t .Run ("User2ChangeStatus" , func (t * testing.T ) {
221
+ user2Session := loginUser (t , "user2" )
222
+ user2Token := getTokenForLoggedInUser (t , user2Session , auth_model .AccessTokenScopeWriteOrganization )
181
223
182
- DecodeJSON (t , resp , & apiOrgList )
183
- assert . Len (t , apiOrgList , 13 )
184
- assert . Equal (t , "Limited Org 36 " , apiOrgList [ 1 ]. FullName )
185
- assert . Equal (t , "limited" , apiOrgList [ 1 ]. Visibility )
224
+ req := NewRequest (t , "PUT" , "/api/v1/orgs/org3/public_members/user2" ). AddTokenAuth ( user2Token )
225
+ MakeRequest (t , req , http . StatusNoContent )
226
+ req = NewRequest (t , "DELETE " , "/api/v1/orgs/org3/public_members/user2" ). AddTokenAuth ( user2Token )
227
+ MakeRequest (t , req , http . StatusNoContent )
186
228
187
- // accessing without a token will return only public orgs
188
- req = NewRequest (t , "GET" , "/api/v1/orgs" )
189
- resp = MakeRequest (t , req , http .StatusOK )
229
+ // non admin but org owner could also change other member's status
230
+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {Name : "user2" })
231
+ require .False (t , user2 .IsAdmin )
232
+ req = NewRequest (t , "PUT" , "/api/v1/orgs/org3/public_members/user1" ).AddTokenAuth (user2Token )
233
+ MakeRequest (t , req , http .StatusNoContent )
234
+ req = NewRequest (t , "DELETE" , "/api/v1/orgs/org3/public_members/user1" ).AddTokenAuth (user2Token )
235
+ MakeRequest (t , req , http .StatusNoContent )
236
+ })
190
237
191
- DecodeJSON (t , resp , & apiOrgList )
192
- assert .Len (t , apiOrgList , 9 )
193
- assert .Equal (t , "org 17" , apiOrgList [0 ].FullName )
194
- assert .Equal (t , "public" , apiOrgList [0 ].Visibility )
195
- }
238
+ t .Run ("User4ChangeStatus" , func (t * testing.T ) {
239
+ user4Session := loginUser (t , "user4" )
240
+ user4Token := getTokenForLoggedInUser (t , user4Session , auth_model .AccessTokenScopeWriteOrganization )
196
241
197
- func TestAPIOrgSearchEmptyTeam (t * testing.T ) {
198
- defer tests .PrepareTestEnv (t )()
199
- token := getUserToken (t , "user1" , auth_model .AccessTokenScopeWriteOrganization )
200
- orgName := "org_with_empty_team"
201
-
202
- // create org
203
- req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & api.CreateOrgOption {
204
- UserName : orgName ,
205
- }).AddTokenAuth (token )
206
- MakeRequest (t , req , http .StatusCreated )
207
-
208
- // create team with no member
209
- req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/orgs/%s/teams" , orgName ), & api.CreateTeamOption {
210
- Name : "Empty" ,
211
- IncludesAllRepositories : true ,
212
- Permission : "read" ,
213
- Units : []string {"repo.code" , "repo.issues" , "repo.ext_issues" , "repo.wiki" , "repo.pulls" },
214
- }).AddTokenAuth (token )
215
- MakeRequest (t , req , http .StatusCreated )
216
-
217
- // case-insensitive search for teams that have no members
218
- req = NewRequest (t , "GET" , fmt .Sprintf ("/api/v1/orgs/%s/teams/search?q=%s" , orgName , "empty" )).
219
- AddTokenAuth (token )
220
- resp := MakeRequest (t , req , http .StatusOK )
221
- data := struct {
222
- Ok bool
223
- Data []* api.Team
224
- }{}
225
- DecodeJSON (t , resp , & data )
226
- assert .True (t , data .Ok )
227
- if assert .Len (t , data .Data , 1 ) {
228
- assert .Equal (t , "Empty" , data .Data [0 ].Name )
229
- }
242
+ // user4 is a normal team member, they could change their own status
243
+ req := NewRequest (t , "PUT" , "/api/v1/orgs/org3/public_members/user4" ).AddTokenAuth (user4Token )
244
+ MakeRequest (t , req , http .StatusNoContent )
245
+ req = NewRequest (t , "DELETE" , "/api/v1/orgs/org3/public_members/user4" ).AddTokenAuth (user4Token )
246
+ MakeRequest (t , req , http .StatusNoContent )
247
+ req = NewRequest (t , "PUT" , "/api/v1/orgs/org3/public_members/user1" ).AddTokenAuth (user4Token )
248
+ MakeRequest (t , req , http .StatusForbidden )
249
+ req = NewRequest (t , "DELETE" , "/api/v1/orgs/org3/public_members/user1" ).AddTokenAuth (user4Token )
250
+ MakeRequest (t , req , http .StatusForbidden )
251
+ })
230
252
}
0 commit comments