More work on project permissions

This commit is contained in:
simon987
2019-02-16 11:47:54 -05:00
parent 03153c4d39
commit e079fc8497
18 changed files with 470 additions and 125 deletions

View File

@@ -11,7 +11,7 @@ import (
func TestCreateGetProject(t *testing.T) {
resp := createProject(api.CreateProjectRequest{
resp := createProjectAsAdmin(api.CreateProjectRequest{
Name: "Test name",
CloneUrl: "http://github.com/test/test",
GitRepo: "drone/webhooktest",
@@ -19,7 +19,7 @@ func TestCreateGetProject(t *testing.T) {
Priority: 123,
Motd: "motd",
Public: true,
Hidden: true,
Hidden: false,
})
id := resp.Id
@@ -31,7 +31,7 @@ func TestCreateGetProject(t *testing.T) {
t.Fail()
}
getResp, _ := getProject(id)
getResp, _ := getProjectAsAdmin(id)
if getResp.Project.Id != id {
t.Error()
@@ -60,13 +60,13 @@ func TestCreateGetProject(t *testing.T) {
if getResp.Project.Public != true {
t.Error()
}
if getResp.Project.Hidden != true {
if getResp.Project.Hidden != false {
t.Error()
}
}
func TestCreateProjectInvalid(t *testing.T) {
resp := createProject(api.CreateProjectRequest{})
resp := createProjectAsAdmin(api.CreateProjectRequest{})
if resp.Ok != false {
t.Fail()
@@ -74,10 +74,10 @@ func TestCreateProjectInvalid(t *testing.T) {
}
func TestCreateDuplicateProjectName(t *testing.T) {
createProject(api.CreateProjectRequest{
createProjectAsAdmin(api.CreateProjectRequest{
Name: "duplicate name",
})
resp := createProject(api.CreateProjectRequest{
resp := createProjectAsAdmin(api.CreateProjectRequest{
Name: "duplicate name",
})
@@ -91,11 +91,11 @@ func TestCreateDuplicateProjectName(t *testing.T) {
}
func TestCreateDuplicateProjectRepo(t *testing.T) {
createProject(api.CreateProjectRequest{
createProjectAsAdmin(api.CreateProjectRequest{
Name: "different name",
GitRepo: "user/same",
})
resp := createProject(api.CreateProjectRequest{
resp := createProjectAsAdmin(api.CreateProjectRequest{
Name: "but same repo",
GitRepo: "user/same",
})
@@ -111,7 +111,7 @@ func TestCreateDuplicateProjectRepo(t *testing.T) {
func TestGetProjectNotFound(t *testing.T) {
getResp, r := getProject(12345)
getResp, r := getProjectAsAdmin(12345)
if getResp.Ok != false {
t.Fail()
@@ -128,7 +128,7 @@ func TestGetProjectNotFound(t *testing.T) {
func TestUpdateProjectValid(t *testing.T) {
pid := createProject(api.CreateProjectRequest{
pid := createProjectAsAdmin(api.CreateProjectRequest{
Public: true,
Version: "versionA",
Motd: "MotdA",
@@ -146,13 +146,13 @@ func TestUpdateProjectValid(t *testing.T) {
Motd: "MotdB",
Public: false,
Hidden: true,
}, pid)
}, pid, testAdminCtx)
if updateResp.Ok != true {
t.Error()
}
proj, _ := getProject(pid)
proj, _ := getProjectAsAdmin(pid)
if proj.Project.Public != false {
t.Error()
@@ -176,7 +176,7 @@ func TestUpdateProjectValid(t *testing.T) {
func TestUpdateProjectInvalid(t *testing.T) {
pid := createProject(api.CreateProjectRequest{
pid := createProjectAsAdmin(api.CreateProjectRequest{
Public: true,
Version: "lllllllllllll",
Motd: "2wwwwwwwwwwwwwww",
@@ -193,7 +193,7 @@ func TestUpdateProjectInvalid(t *testing.T) {
Name: "NameB-0",
Motd: "MotdB000000",
Public: false,
}, pid)
}, pid, testAdminCtx)
if updateResp.Ok != false {
t.Error()
@@ -206,7 +206,7 @@ func TestUpdateProjectInvalid(t *testing.T) {
func TestUpdateProjectConstraintFail(t *testing.T) {
pid := createProject(api.CreateProjectRequest{
pid := createProjectAsAdmin(api.CreateProjectRequest{
Public: true,
Version: "testUpdateProjectConstraintFail",
Motd: "testUpdateProjectConstraintFail",
@@ -216,7 +216,7 @@ func TestUpdateProjectConstraintFail(t *testing.T) {
Priority: 1,
}).Id
createProject(api.CreateProjectRequest{
createProjectAsAdmin(api.CreateProjectRequest{
Public: true,
Version: "testUpdateProjectConstraintFail_d",
Motd: "testUpdateProjectConstraintFail_d",
@@ -232,7 +232,7 @@ func TestUpdateProjectConstraintFail(t *testing.T) {
CloneUrl: "testUpdateProjectConstraintFail_d",
Name: "testUpdateProjectConstraintFail_d",
Motd: "testUpdateProjectConstraintFail_d",
}, pid)
}, pid, testAdminCtx)
if updateResp.Ok != false {
t.Error()
@@ -243,9 +243,215 @@ func TestUpdateProjectConstraintFail(t *testing.T) {
}
}
func createProject(req api.CreateProjectRequest) *api.CreateProjectResponse {
func TestNotLoggedProjectCreate(t *testing.T) {
r := Post("/project/create", req, nil)
r := createProject(api.CreateProjectRequest{
Hidden: false,
Name: "testnotlogged",
Priority: 1,
CloneUrl: "testnotlogged",
GitRepo: "testnotlogged",
}, nil)
if r.Ok != false {
t.Error()
}
if len(r.Message) <= 0 {
t.Error()
}
}
func TestUserCanCreatePrivateProject(t *testing.T) {
r := createProject(api.CreateProjectRequest{
Hidden: false,
Name: "testuserprivate",
Priority: 1,
CloneUrl: "testuserprivate",
GitRepo: "testuserprivate",
Public: false,
}, testUserCtx)
if r.Ok != true {
t.Error()
}
}
func TestUserCannotCreatePublicProject(t *testing.T) {
r := createProject(api.CreateProjectRequest{
Hidden: false,
Name: "testuserprivate",
Priority: 1,
CloneUrl: "testuserprivate",
GitRepo: "testuserprivate",
Public: true,
}, testUserCtx)
if r.Ok != false {
t.Error()
}
if len(r.Message) <= 0 {
t.Error()
}
}
func TestHiddenProjectsNotShownInList(t *testing.T) {
r := createProject(api.CreateProjectRequest{
Hidden: true,
Name: "testhiddenprojectlist",
Priority: 1,
CloneUrl: "testhiddenprojectlist",
GitRepo: "testhiddenprojectlist",
Public: false,
}, testUserCtx)
if r.Ok != true {
t.Error()
}
list := getProjectList(nil)
for _, p := range *list.Projects {
if p.Id == r.Id {
t.Error()
}
}
}
func TestHiddenProjectCannotBePublic(t *testing.T) {
r := createProject(api.CreateProjectRequest{
Hidden: true,
Name: "testhiddencannotbepublic",
Priority: 1,
CloneUrl: "testhiddencannotbepublic",
GitRepo: "testhiddencannotbepublic",
Public: true,
}, testAdminCtx)
if r.Ok != false {
t.Error()
}
if len(r.Message) <= 0 {
t.Error()
}
}
func TestHiddenProjectNotAccessible(t *testing.T) {
otherUser := getSessionCtx("otheruser", "otheruser", false)
r := createProject(api.CreateProjectRequest{
Hidden: true,
Name: "testhiddenprojectaccess",
Priority: 1,
CloneUrl: "testhiddenprojectaccess",
GitRepo: "testhiddenprojectaccess",
Public: false,
}, testUserCtx)
if r.Ok != true {
t.Error()
}
pAdmin, _ := getProject(r.Id, testAdminCtx)
pUser, _ := getProject(r.Id, testUserCtx)
pOtherUser, _ := getProject(r.Id, otherUser)
pGuest, _ := getProject(r.Id, nil)
if pAdmin.Ok != true {
t.Error()
}
if pUser.Ok != true {
t.Error()
}
if pOtherUser.Ok != false {
t.Error()
}
if pGuest.Ok != false {
t.Error()
}
}
func TestUpdateProjectPermissions(t *testing.T) {
p := createProjectAsAdmin(api.CreateProjectRequest{
GitRepo: "updateprojectpermissions",
CloneUrl: "updateprojectpermissions",
Name: "updateprojectpermissions",
Version: "updateprojectpermissions",
})
r := updateProject(api.UpdateProjectRequest{
GitRepo: "newupdateprojectpermissions",
CloneUrl: "newupdateprojectpermissions",
Name: "newupdateprojectpermissions",
}, p.Id, nil)
if r.Ok != false {
t.Error()
}
if len(r.Message) <= 0 {
t.Error()
}
}
func TestUserWithReadAccessShouldSeeHiddenProjectInList(t *testing.T) {
pHidden := createProject(api.CreateProjectRequest{
GitRepo: "testUserHidden",
CloneUrl: "testUserHidden",
Name: "testUserHidden",
Version: "testUserHidden",
Hidden: true,
}, testUserCtx)
list := getProjectList(testUserCtx)
found := false
for _, p := range *list.Projects {
if p.Id == pHidden.Id {
found = true
}
}
if !found {
t.Error()
}
}
func TestAdminShouldSeeHiddenProjectInList(t *testing.T) {
pHidden := createProject(api.CreateProjectRequest{
GitRepo: "testAdminHidden",
CloneUrl: "testAdminHidden",
Name: "testAdminHidden",
Version: "testAdminHidden",
Hidden: true,
}, testUserCtx)
list := getProjectList(testAdminCtx)
found := false
for _, p := range *list.Projects {
if p.Id == pHidden.Id {
found = true
}
}
if !found {
t.Error()
}
}
func createProjectAsAdmin(req api.CreateProjectRequest) *api.CreateProjectResponse {
return createProject(req, testAdminCtx)
}
func createProject(req api.CreateProjectRequest, s *http.Client) *api.CreateProjectResponse {
r := Post("/project/create", req, nil, s)
var resp api.CreateProjectResponse
data, _ := ioutil.ReadAll(r.Body)
@@ -255,9 +461,13 @@ func createProject(req api.CreateProjectRequest) *api.CreateProjectResponse {
return &resp
}
func getProject(id int64) (*api.GetProjectResponse, *http.Response) {
func getProjectAsAdmin(id int64) (*api.GetProjectResponse, *http.Response) {
return getProject(id, testAdminCtx)
}
r := Get(fmt.Sprintf("/project/get/%d", id), nil)
func getProject(id int64, s *http.Client) (*api.GetProjectResponse, *http.Response) {
r := Get(fmt.Sprintf("/project/get/%d", id), nil, s)
var getResp api.GetProjectResponse
data, _ := ioutil.ReadAll(r.Body)
@@ -267,9 +477,9 @@ func getProject(id int64) (*api.GetProjectResponse, *http.Response) {
return &getResp, r
}
func updateProject(request api.UpdateProjectRequest, pid int64) *api.UpdateProjectResponse {
func updateProject(request api.UpdateProjectRequest, pid int64, s *http.Client) *api.UpdateProjectResponse {
r := Post(fmt.Sprintf("/project/update/%d", pid), request, nil)
r := Post(fmt.Sprintf("/project/update/%d", pid), request, nil, s)
var resp api.UpdateProjectResponse
data, _ := ioutil.ReadAll(r.Body)
@@ -278,3 +488,14 @@ func updateProject(request api.UpdateProjectRequest, pid int64) *api.UpdateProje
return &resp
}
func getProjectList(s *http.Client) *api.GetAllProjectsResponse {
r := Get("/project/list", nil, s)
var resp api.GetAllProjectsResponse
data, _ := ioutil.ReadAll(r.Body)
err := json.Unmarshal(data, &resp)
handleErr(err)
return &resp
}