mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-13 23:09:02 +00:00
More work on project permissions
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user