@@ -6,7 +6,6 @@ package integration
66import (
77 "fmt"
88 "net/http"
9- "net/url"
109 "strings"
1110 "testing"
1211
@@ -19,46 +18,52 @@ import (
1918 user_model "code.gitea.io/gitea/models/user"
2019 "code.gitea.io/gitea/modules/setting"
2120 api "code.gitea.io/gitea/modules/structs"
21+ "code.gitea.io/gitea/modules/test"
2222 "code.gitea.io/gitea/tests"
2323
2424 "github.com/stretchr/testify/assert"
2525)
2626
27- func TestAPIOrgCreate (t * testing.T ) {
28- onGiteaRun (t , func (* testing.T , * url.URL ) {
29- token := getUserToken (t , "user1" , auth_model .AccessTokenScopeWriteOrganization )
30-
31- org := api.CreateOrgOption {
32- UserName : "user1_org" ,
33- FullName : "User1's organization" ,
34- Description : "This organization created by user1" ,
35- Website : "https://try.gitea.io" ,
36- Location : "Shanghai" ,
37- Visibility : "limited" ,
38- }
39- req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & org ).
40- AddTokenAuth (token )
41- resp := MakeRequest (t , req , http .StatusCreated )
42-
43- var apiOrg api.Organization
44- DecodeJSON (t , resp , & apiOrg )
45-
46- assert .Equal (t , org .UserName , apiOrg .Name )
47- assert .Equal (t , org .FullName , apiOrg .FullName )
48- assert .Equal (t , org .Description , apiOrg .Description )
49- assert .Equal (t , org .Website , apiOrg .Website )
50- assert .Equal (t , org .Location , apiOrg .Location )
51- assert .Equal (t , org .Visibility , apiOrg .Visibility )
52-
53- unittest .AssertExistsAndLoadBean (t , & user_model.User {
54- Name : org .UserName ,
55- LowerName : strings .ToLower (org .UserName ),
56- FullName : org .FullName ,
57- })
27+ func TestAPIOrgCreateRename (t * testing.T ) {
28+ defer tests .PrepareTestEnv (t )()
29+ token := getUserToken (t , "user1" , auth_model .AccessTokenScopeWriteOrganization )
30+
31+ org := api.CreateOrgOption {
32+ UserName : "user1_org" ,
33+ FullName : "User1's organization" ,
34+ Description : "This organization created by user1" ,
35+ Website : "https://try.gitea.io" ,
36+ Location : "Shanghai" ,
37+ Visibility : "limited" ,
38+ }
39+ req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & org ).AddTokenAuth (token )
40+ resp := MakeRequest (t , req , http .StatusCreated )
41+
42+ var apiOrg api.Organization
43+ DecodeJSON (t , resp , & apiOrg )
44+
45+ assert .Equal (t , org .UserName , apiOrg .Name )
46+ assert .Equal (t , org .FullName , apiOrg .FullName )
47+ assert .Equal (t , org .Description , apiOrg .Description )
48+ assert .Equal (t , org .Website , apiOrg .Website )
49+ assert .Equal (t , org .Location , apiOrg .Location )
50+ assert .Equal (t , org .Visibility , apiOrg .Visibility )
51+
52+ unittest .AssertExistsAndLoadBean (t , & user_model.User {
53+ Name : org .UserName ,
54+ LowerName : strings .ToLower (org .UserName ),
55+ FullName : org .FullName ,
56+ })
57+
58+ // check org name
59+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s" , org .UserName ).AddTokenAuth (token )
60+ resp = MakeRequest (t , req , http .StatusOK )
61+ DecodeJSON (t , resp , & apiOrg )
62+ assert .EqualValues (t , org .UserName , apiOrg .Name )
5863
64+ t .Run ("CheckPermission" , func (t * testing.T ) {
5965 // Check owner team permission
6066 ownerTeam , _ := org_model .GetOwnerTeam (db .DefaultContext , apiOrg .ID )
61-
6267 for _ , ut := range unit_model .AllRepoUnitTypes {
6368 up := perm .AccessModeOwner
6469 if ut == unit_model .TypeExternalTracker || ut == unit_model .TypeExternalWiki {
@@ -71,103 +76,101 @@ func TestAPIOrgCreate(t *testing.T) {
7176 AccessMode : up ,
7277 })
7378 }
79+ })
7480
75- req = NewRequestf ( t , "GET " , "/api/v1/orgs/%s" , org . UserName ).
76- AddTokenAuth (token )
81+ t . Run ( "CheckMembers " , func ( t * testing. T ) {
82+ req = NewRequestf ( t , "GET" , "/api/v1/orgs/%s/members" , org . UserName ). AddTokenAuth (token )
7783 resp = MakeRequest (t , req , http .StatusOK )
78- DecodeJSON (t , resp , & apiOrg )
79- assert .EqualValues (t , org .UserName , apiOrg .Name )
8084
81- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , org .UserName ).
82- AddTokenAuth (token )
83- resp = MakeRequest (t , req , http .StatusOK )
85+ // user1 on this org is public
86+ var users []* api.User
87+ DecodeJSON (t , resp , & users )
88+ assert .Len (t , users , 1 )
89+ assert .EqualValues (t , "user1" , users [0 ].UserName )
90+ })
8491
92+ t .Run ("RenameOrg" , func (t * testing.T ) {
93+ req = NewRequestWithJSON (t , "POST" , "/api/v1/orgs/user1_org/rename" , & api.RenameOrgOption {
94+ NewName : "renamed_org" ,
95+ }).AddTokenAuth (token )
96+ MakeRequest (t , req , http .StatusNoContent )
97+ unittest .AssertExistsAndLoadBean (t , & org_model.Organization {Name : "renamed_org" })
98+ org .UserName = "renamed_org" // update the variable so the following tests could still use it
99+ })
100+
101+ t .Run ("ListRepos" , func (t * testing.T ) {
102+ // FIXME: this test is wrong, there is no repository at all, so the for-loop is empty
103+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , org .UserName ).AddTokenAuth (token )
104+ resp = MakeRequest (t , req , http .StatusOK )
85105 var repos []* api.Repository
86106 DecodeJSON (t , resp , & repos )
87107 for _ , repo := range repos {
88108 assert .False (t , repo .Private )
89109 }
90-
91- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/members" , org .UserName ).
92- AddTokenAuth (token )
93- resp = MakeRequest (t , req , http .StatusOK )
94-
95- // user1 on this org is public
96- var users []* api.User
97- DecodeJSON (t , resp , & users )
98- assert .Len (t , users , 1 )
99- assert .EqualValues (t , "user1" , users [0 ].UserName )
100110 })
101111}
102112
103113func TestAPIOrgEdit (t * testing.T ) {
104- onGiteaRun (t , func (* testing.T , * url.URL ) {
105- session := loginUser (t , "user1" )
106-
107- token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteOrganization )
108- org := api.EditOrgOption {
109- FullName : "Org3 organization new full name" ,
110- Description : "A new description" ,
111- Website : "https://try.gitea.io/new" ,
112- Location : "Beijing" ,
113- Visibility : "private" ,
114- }
115- req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).
116- AddTokenAuth (token )
117- resp := MakeRequest (t , req , http .StatusOK )
118-
119- var apiOrg api.Organization
120- DecodeJSON (t , resp , & apiOrg )
121-
122- assert .Equal (t , "org3" , apiOrg .Name )
123- assert .Equal (t , org .FullName , apiOrg .FullName )
124- assert .Equal (t , org .Description , apiOrg .Description )
125- assert .Equal (t , org .Website , apiOrg .Website )
126- assert .Equal (t , org .Location , apiOrg .Location )
127- assert .Equal (t , org .Visibility , apiOrg .Visibility )
128- })
114+ 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 )
128+
129+ var apiOrg api.Organization
130+ DecodeJSON (t , resp , & apiOrg )
131+
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 )
129138}
130139
131140func TestAPIOrgEditBadVisibility (t * testing.T ) {
132- onGiteaRun (t , func (* testing.T , * url.URL ) {
133- session := loginUser (t , "user1" )
134-
135- token := getTokenForLoggedInUser (t , session , auth_model .AccessTokenScopeWriteOrganization )
136- org := api.EditOrgOption {
137- FullName : "Org3 organization new full name" ,
138- Description : "A new description" ,
139- Website : "https://try.gitea.io/new" ,
140- Location : "Beijing" ,
141- Visibility : "badvisibility" ,
142- }
143- req := NewRequestWithJSON (t , "PATCH" , "/api/v1/orgs/org3" , & org ).
144- AddTokenAuth (token )
145- MakeRequest (t , req , http .StatusUnprocessableEntity )
146- })
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 )
147155}
148156
149157func TestAPIOrgDeny (t * testing.T ) {
150- onGiteaRun (t , func (* testing.T , * url.URL ) {
151- setting .Service .RequireSignInView = true
152- defer func () {
153- setting .Service .RequireSignInView = false
154- }()
158+ defer tests .PrepareTestEnv (t )()
159+ defer test .MockVariableValue (& setting .Service .RequireSignInView , true )()
155160
156- orgName := "user1_org"
157- req := NewRequestf (t , "GET" , "/api/v1/orgs/%s" , orgName )
158- MakeRequest (t , req , http .StatusNotFound )
161+ orgName := "user1_org"
162+ req := NewRequestf (t , "GET" , "/api/v1/orgs/%s" , orgName )
163+ MakeRequest (t , req , http .StatusNotFound )
159164
160- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , orgName )
161- MakeRequest (t , req , http .StatusNotFound )
165+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/repos" , orgName )
166+ MakeRequest (t , req , http .StatusNotFound )
162167
163- req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/members" , orgName )
164- MakeRequest (t , req , http .StatusNotFound )
165- })
168+ req = NewRequestf (t , "GET" , "/api/v1/orgs/%s/members" , orgName )
169+ MakeRequest (t , req , http .StatusNotFound )
166170}
167171
168172func TestAPIGetAll (t * testing.T ) {
169173 defer tests .PrepareTestEnv (t )()
170-
171174 token := getUserToken (t , "user1" , auth_model .AccessTokenScopeReadOrganization )
172175
173176 // accessing with a token will return all orgs
@@ -192,60 +195,36 @@ func TestAPIGetAll(t *testing.T) {
192195}
193196
194197func TestAPIOrgSearchEmptyTeam (t * testing.T ) {
195- onGiteaRun (t , func (* testing.T , * url.URL ) {
196- token := getUserToken (t , "user1" , auth_model .AccessTokenScopeWriteOrganization )
197- orgName := "org_with_empty_team"
198-
199- // create org
200- req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & api.CreateOrgOption {
201- UserName : orgName ,
202- }).AddTokenAuth (token )
203- MakeRequest (t , req , http .StatusCreated )
204-
205- // create team with no member
206- req = NewRequestWithJSON (t , "POST" , fmt .Sprintf ("/api/v1/orgs/%s/teams" , orgName ), & api.CreateTeamOption {
207- Name : "Empty" ,
208- IncludesAllRepositories : true ,
209- Permission : "read" ,
210- Units : []string {"repo.code" , "repo.issues" , "repo.ext_issues" , "repo.wiki" , "repo.pulls" },
211- }).AddTokenAuth (token )
212- MakeRequest (t , req , http .StatusCreated )
213-
214- // case-insensitive search for teams that have no members
215- req = NewRequest (t , "GET" , fmt .Sprintf ("/api/v1/orgs/%s/teams/search?q=%s" , orgName , "empty" )).
216- AddTokenAuth (token )
217- resp := MakeRequest (t , req , http .StatusOK )
218- data := struct {
219- Ok bool
220- Data []* api.Team
221- }{}
222- DecodeJSON (t , resp , & data )
223- assert .True (t , data .Ok )
224- if assert .Len (t , data .Data , 1 ) {
225- assert .EqualValues (t , "Empty" , data .Data [0 ].Name )
226- }
227- })
228- }
229-
230- func TestAPIOrgRename (t * testing.T ) {
231- onGiteaRun (t , func (* testing.T , * url.URL ) {
232- token := getUserToken (t , "user1" , auth_model .AccessTokenScopeWriteOrganization )
233- orgName := "org_to_rename"
234- newOrgName := "renamed_org"
235-
236- // create org
237- req := NewRequestWithJSON (t , "POST" , "/api/v1/orgs" , & api.CreateOrgOption {
238- UserName : orgName ,
239- }).AddTokenAuth (token )
240- MakeRequest (t , req , http .StatusCreated )
241-
242- req = NewRequestWithJSON (t , "POST" , "/api/v1/orgs/org_to_rename/rename" , & api.RenameOrgOption {
243- NewName : newOrgName ,
244- }).AddTokenAuth (token )
245- MakeRequest (t , req , http .StatusNoContent )
246-
247- unittest .AssertExistsAndLoadBean (t , & org_model.Organization {
248- Name : newOrgName ,
249- })
250- })
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 .EqualValues (t , "Empty" , data .Data [0 ].Name )
229+ }
251230}
0 commit comments