code.gitea.io/gitea@v1.22.3/tests/integration/api_user_org_perm_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "net/http" 9 "testing" 10 11 auth_model "code.gitea.io/gitea/models/auth" 12 api "code.gitea.io/gitea/modules/structs" 13 "code.gitea.io/gitea/tests" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 type apiUserOrgPermTestCase struct { 19 LoginUser string 20 User string 21 Organization string 22 ExpectedOrganizationPermissions api.OrganizationPermissions 23 } 24 25 func TestTokenNeeded(t *testing.T) { 26 defer tests.PrepareTestEnv(t)() 27 28 req := NewRequest(t, "GET", "/api/v1/users/user1/orgs/org6/permissions") 29 MakeRequest(t, req, http.StatusUnauthorized) 30 } 31 32 func sampleTest(t *testing.T, auoptc apiUserOrgPermTestCase) { 33 defer tests.PrepareTestEnv(t)() 34 35 session := loginUser(t, auoptc.LoginUser) 36 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadOrganization, auth_model.AccessTokenScopeReadUser) 37 38 req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/orgs/%s/permissions", auoptc.User, auoptc.Organization)). 39 AddTokenAuth(token) 40 resp := MakeRequest(t, req, http.StatusOK) 41 42 var apiOP api.OrganizationPermissions 43 DecodeJSON(t, resp, &apiOP) 44 assert.Equal(t, auoptc.ExpectedOrganizationPermissions.IsOwner, apiOP.IsOwner) 45 assert.Equal(t, auoptc.ExpectedOrganizationPermissions.IsAdmin, apiOP.IsAdmin) 46 assert.Equal(t, auoptc.ExpectedOrganizationPermissions.CanWrite, apiOP.CanWrite) 47 assert.Equal(t, auoptc.ExpectedOrganizationPermissions.CanRead, apiOP.CanRead) 48 assert.Equal(t, auoptc.ExpectedOrganizationPermissions.CanCreateRepository, apiOP.CanCreateRepository) 49 } 50 51 func TestWithOwnerUser(t *testing.T) { 52 sampleTest(t, apiUserOrgPermTestCase{ 53 LoginUser: "user2", 54 User: "user2", 55 Organization: "org3", 56 ExpectedOrganizationPermissions: api.OrganizationPermissions{ 57 IsOwner: true, 58 IsAdmin: true, 59 CanWrite: true, 60 CanRead: true, 61 CanCreateRepository: true, 62 }, 63 }) 64 } 65 66 func TestCanWriteUser(t *testing.T) { 67 sampleTest(t, apiUserOrgPermTestCase{ 68 LoginUser: "user4", 69 User: "user4", 70 Organization: "org3", 71 ExpectedOrganizationPermissions: api.OrganizationPermissions{ 72 IsOwner: false, 73 IsAdmin: false, 74 CanWrite: true, 75 CanRead: true, 76 CanCreateRepository: false, 77 }, 78 }) 79 } 80 81 func TestAdminUser(t *testing.T) { 82 sampleTest(t, apiUserOrgPermTestCase{ 83 LoginUser: "user1", 84 User: "user28", 85 Organization: "org3", 86 ExpectedOrganizationPermissions: api.OrganizationPermissions{ 87 IsOwner: false, 88 IsAdmin: true, 89 CanWrite: true, 90 CanRead: true, 91 CanCreateRepository: true, 92 }, 93 }) 94 } 95 96 func TestAdminCanNotCreateRepo(t *testing.T) { 97 sampleTest(t, apiUserOrgPermTestCase{ 98 LoginUser: "user1", 99 User: "user28", 100 Organization: "org6", 101 ExpectedOrganizationPermissions: api.OrganizationPermissions{ 102 IsOwner: false, 103 IsAdmin: true, 104 CanWrite: true, 105 CanRead: true, 106 CanCreateRepository: false, 107 }, 108 }) 109 } 110 111 func TestCanReadUser(t *testing.T) { 112 sampleTest(t, apiUserOrgPermTestCase{ 113 LoginUser: "user1", 114 User: "user24", 115 Organization: "org25", 116 ExpectedOrganizationPermissions: api.OrganizationPermissions{ 117 IsOwner: false, 118 IsAdmin: false, 119 CanWrite: false, 120 CanRead: true, 121 CanCreateRepository: false, 122 }, 123 }) 124 } 125 126 func TestUnknowUser(t *testing.T) { 127 defer tests.PrepareTestEnv(t)() 128 129 session := loginUser(t, "user1") 130 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser, auth_model.AccessTokenScopeReadOrganization) 131 132 req := NewRequest(t, "GET", "/api/v1/users/unknow/orgs/org25/permissions"). 133 AddTokenAuth(token) 134 resp := MakeRequest(t, req, http.StatusNotFound) 135 136 var apiError api.APIError 137 DecodeJSON(t, resp, &apiError) 138 assert.Equal(t, "user redirect does not exist [name: unknow]", apiError.Message) 139 } 140 141 func TestUnknowOrganization(t *testing.T) { 142 defer tests.PrepareTestEnv(t)() 143 144 session := loginUser(t, "user1") 145 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser, auth_model.AccessTokenScopeReadOrganization) 146 147 req := NewRequest(t, "GET", "/api/v1/users/user1/orgs/unknow/permissions"). 148 AddTokenAuth(token) 149 resp := MakeRequest(t, req, http.StatusNotFound) 150 var apiError api.APIError 151 DecodeJSON(t, resp, &apiError) 152 assert.Equal(t, "GetUserByName", apiError.Message) 153 }