@ -22,6 +22,7 @@ import (
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestAPIOrgCreateRename ( t * testing . T ) {
@ -110,11 +111,33 @@ func TestAPIOrgCreateRename(t *testing.T) {
} )
}
func TestAPIOrg Edit ( t * testing . T ) {
func TestAPIOrg General ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
session := loginUser ( t , "user1" )
user1Session := loginUser ( t , "user1" )
user1Token := getTokenForLoggedInUser ( t , user1Session , auth_model . AccessTokenScopeWriteOrganization )
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeWriteOrganization )
t . Run ( "OrgGetAll" , func ( t * testing . T ) {
// accessing with a token will return all orgs
req := NewRequest ( t , "GET" , "/api/v1/orgs" ) . AddTokenAuth ( user1Token )
resp := MakeRequest ( t , req , http . StatusOK )
var apiOrgList [ ] * api . Organization
DecodeJSON ( t , resp , & apiOrgList )
assert . Len ( t , apiOrgList , 13 )
assert . Equal ( t , "Limited Org 36" , apiOrgList [ 1 ] . FullName )
assert . Equal ( t , "limited" , apiOrgList [ 1 ] . Visibility )
// accessing without a token will return only public orgs
req = NewRequest ( t , "GET" , "/api/v1/orgs" )
resp = MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiOrgList )
assert . Len ( t , apiOrgList , 9 )
assert . Equal ( t , "org 17" , apiOrgList [ 0 ] . FullName )
assert . Equal ( t , "public" , apiOrgList [ 0 ] . Visibility )
} )
t . Run ( "OrgEdit" , func ( t * testing . T ) {
org := api . EditOrgOption {
FullName : "Org3 organization new full name" ,
Description : "A new description" ,
@ -122,8 +145,7 @@ func TestAPIOrgEdit(t *testing.T) {
Location : "Beijing" ,
Visibility : "private" ,
}
req := NewRequestWithJSON ( t , "PATCH" , "/api/v1/orgs/org3" , & org ) .
AddTokenAuth ( token )
req := NewRequestWithJSON ( t , "PATCH" , "/api/v1/orgs/org3" , & org ) . AddTokenAuth ( user1Token )
resp := MakeRequest ( t , req , http . StatusOK )
var apiOrg api . Organization
@ -135,13 +157,9 @@ func TestAPIOrgEdit(t *testing.T) {
assert . Equal ( t , org . Website , apiOrg . Website )
assert . Equal ( t , org . Location , apiOrg . Location )
assert . Equal ( t , org . Visibility , apiOrg . Visibility )
}
func TestAPIOrgEditBadVisibility ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
session := loginUser ( t , "user1" )
} )
t oken := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeWriteOrganization )
t . Run ( "OrgEditBadVisibility" , func ( t * testing . T ) {
org := api . EditOrgOption {
FullName : "Org3 organization new full name" ,
Description : "A new description" ,
@ -149,13 +167,11 @@ func TestAPIOrgEditBadVisibility(t *testing.T) {
Location : "Beijing" ,
Visibility : "badvisibility" ,
}
req := NewRequestWithJSON ( t , "PATCH" , "/api/v1/orgs/org3" , & org ) .
AddTokenAuth ( token )
req := NewRequestWithJSON ( t , "PATCH" , "/api/v1/orgs/org3" , & org ) . AddTokenAuth ( user1Token )
MakeRequest ( t , req , http . StatusUnprocessableEntity )
}
} )
func TestAPIOrgDeny ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
t . Run ( "OrgDeny" , func ( t * testing . T ) {
defer test . MockVariableValue ( & setting . Service . RequireSignInViewStrict , true ) ( )
orgName := "user1_org"
@ -167,42 +183,14 @@ func TestAPIOrgDeny(t *testing.T) {
req = NewRequestf ( t , "GET" , "/api/v1/orgs/%s/members" , orgName )
MakeRequest ( t , req , http . StatusNotFound )
}
func TestAPIGetAll ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
token := getUserToken ( t , "user1" , auth_model . AccessTokenScopeReadOrganization )
// accessing with a token will return all orgs
req := NewRequest ( t , "GET" , "/api/v1/orgs" ) .
AddTokenAuth ( token )
resp := MakeRequest ( t , req , http . StatusOK )
var apiOrgList [ ] * api . Organization
DecodeJSON ( t , resp , & apiOrgList )
assert . Len ( t , apiOrgList , 13 )
assert . Equal ( t , "Limited Org 36" , apiOrgList [ 1 ] . FullName )
assert . Equal ( t , "limited" , apiOrgList [ 1 ] . Visibility )
// accessing without a token will return only public orgs
req = NewRequest ( t , "GET" , "/api/v1/orgs" )
resp = MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiOrgList )
assert . Len ( t , apiOrgList , 9 )
assert . Equal ( t , "org 17" , apiOrgList [ 0 ] . FullName )
assert . Equal ( t , "public" , apiOrgList [ 0 ] . Visibility )
}
} )
func TestAPIOrgSearchEmptyTeam ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
token := getUserToken ( t , "user1" , auth_model . AccessTokenScopeWriteOrganization )
t . Run ( "OrgSearchEmptyTeam" , func ( t * testing . T ) {
orgName := "org_with_empty_team"
// create org
req := NewRequestWithJSON ( t , "POST" , "/api/v1/orgs" , & api . CreateOrgOption {
UserName : orgName ,
} ) . AddTokenAuth ( t oken)
} ) . AddTokenAuth ( user1Token )
MakeRequest ( t , req , http . StatusCreated )
// create team with no member
@ -211,12 +199,12 @@ func TestAPIOrgSearchEmptyTeam(t *testing.T) {
IncludesAllRepositories : true ,
Permission : "read" ,
Units : [ ] string { "repo.code" , "repo.issues" , "repo.ext_issues" , "repo.wiki" , "repo.pulls" } ,
} ) . AddTokenAuth ( t oken)
} ) . AddTokenAuth ( user1T oken)
MakeRequest ( t , req , http . StatusCreated )
// case-insensitive search for teams that have no members
req = NewRequest ( t , "GET" , fmt . Sprintf ( "/api/v1/orgs/%s/teams/search?q=%s" , orgName , "empty" ) ) .
AddTokenAuth ( t oken)
AddTokenAuth ( user1T oken)
resp := MakeRequest ( t , req , http . StatusOK )
data := struct {
Ok bool
@ -227,4 +215,38 @@ func TestAPIOrgSearchEmptyTeam(t *testing.T) {
if assert . Len ( t , data . Data , 1 ) {
assert . Equal ( t , "Empty" , data . Data [ 0 ] . Name )
}
} )
t . Run ( "User2ChangeStatus" , func ( t * testing . T ) {
user2Session := loginUser ( t , "user2" )
user2Token := getTokenForLoggedInUser ( t , user2Session , auth_model . AccessTokenScopeWriteOrganization )
req := NewRequest ( t , "PUT" , "/api/v1/orgs/org3/public_members/user2" ) . AddTokenAuth ( user2Token )
MakeRequest ( t , req , http . StatusNoContent )
req = NewRequest ( t , "DELETE" , "/api/v1/orgs/org3/public_members/user2" ) . AddTokenAuth ( user2Token )
MakeRequest ( t , req , http . StatusNoContent )
// non admin but org owner could also change other member's status
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { Name : "user2" } )
require . False ( t , user2 . IsAdmin )
req = NewRequest ( t , "PUT" , "/api/v1/orgs/org3/public_members/user1" ) . AddTokenAuth ( user2Token )
MakeRequest ( t , req , http . StatusNoContent )
req = NewRequest ( t , "DELETE" , "/api/v1/orgs/org3/public_members/user1" ) . AddTokenAuth ( user2Token )
MakeRequest ( t , req , http . StatusNoContent )
} )
t . Run ( "User4ChangeStatus" , func ( t * testing . T ) {
user4Session := loginUser ( t , "user4" )
user4Token := getTokenForLoggedInUser ( t , user4Session , auth_model . AccessTokenScopeWriteOrganization )
// user4 is a normal team member, they could change their own status
req := NewRequest ( t , "PUT" , "/api/v1/orgs/org3/public_members/user4" ) . AddTokenAuth ( user4Token )
MakeRequest ( t , req , http . StatusNoContent )
req = NewRequest ( t , "DELETE" , "/api/v1/orgs/org3/public_members/user4" ) . AddTokenAuth ( user4Token )
MakeRequest ( t , req , http . StatusNoContent )
req = NewRequest ( t , "PUT" , "/api/v1/orgs/org3/public_members/user1" ) . AddTokenAuth ( user4Token )
MakeRequest ( t , req , http . StatusForbidden )
req = NewRequest ( t , "DELETE" , "/api/v1/orgs/org3/public_members/user1" ) . AddTokenAuth ( user4Token )
MakeRequest ( t , req , http . StatusForbidden )
} )
}