blob: c286625d2da36ca537554dd77e4e127f119ad5a9 [file]
package gerrit_test
import (
"context"
"encoding/json"
"fmt"
"net/http"
"testing"
"github.com/andygrunwald/go-gerrit"
)
func TestProjectsService_ListAccessRights(t *testing.T) {
setup()
defer teardown()
testMux.HandleFunc("/projects/MyProject/access", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
// from: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#get-access
resp := `{"can_add":true,"can_add_tags":true,"can_upload":true,"config_visible":true,"groups":{"c2ce4749a32ceb82cd6adcce65b8216e12afb41c":{"created_on":"2009-06-08 23:31:00.000000000","description":"Users who perform batch actions on Gerrit","group_id":2,"name":"Non-Interactive Users","options":{},"owner":"Administrators","owner_id":"d5b7124af4de52924ed397913e2c3b37bf186948","url":"#/admin/groups/uuid-c2ce4749a32ceb82cd6adcce65b8216e12afb41c"},"global:Anonymous-Users":{"name":"Anonymous Users","options":{}}},"inherits_from":{"description":"Access inherited by all other projects.","id":"All-Projects","name":"All-Projects"},"is_owner":true,"local":{"refs/*":{"permissions":{"read":{"rules":{"c2ce4749a32ceb82cd6adcce65b8216e12afb41c":{"action":"ALLOW","force":false},"global:Anonymous-Users":{"action":"ALLOW","force":false}}}}}},"owner_of":["refs/*"],"revision":"61157ed63e14d261b6dca40650472a9b0bd88474"}`
_, err := fmt.Fprint(w, `)]}'`+"\n"+resp)
if err != nil {
t.Error(err)
}
})
projectAccessRight, _, err := testClient.Projects.ListAccessRights(context.Background(), "MyProject")
if err != nil {
t.Errorf("project: list access rights error: %s", err)
}
// Doing one deep check to verify the mapping
if projectAccessRight.InheritsFrom.Name != "All-Projects" {
t.Errorf("projectAccessRight.InheritsFrom.Name not matching. Expected '%s', got '%s'", "All-Projects", projectAccessRight.InheritsFrom.Name)
}
}
func TestProjectsService_AddUpdateDeleteAccessRights(t *testing.T) {
setup()
defer teardown()
testMux.HandleFunc("/projects/MyProject/access", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
// from: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#set-access
resp := `{"revision":"61157ed63e14d261b6dca40650472a9b0bd88474","inherits_from":{"id":"All-Projects","name":"All-Projects","description":"Accessinheritedbyallotherprojects."},"local":{"refs/*":{"permissions":{"read":{"rules":{"global:Anonymous-Users":{"action":"ALLOW","force":false}}}}}},"is_owner":true,"owner_of":["refs/*"],"can_upload":true,"can_add":true,"can_add_tags":true,"config_visible":true,"groups":{"global:Anonymous-Users":{"options":{},"name":"AnonymousUsers"}}}`
_, err := fmt.Fprint(w, `)]}'`+"\n"+resp)
if err != nil {
t.Error(err)
}
})
var data = `{"remove":{"refs/*":{"permissions":{"read":{"rules":{"c2ce4749a32ceb82cd6adcce65b8216e12afb41c":{"action":"ALLOW"}}}}}}}`
var req = new(gerrit.ProjectAccessInput)
if err := json.Unmarshal([]byte(data), &req); err != nil {
t.Errorf("project: add/update/delete access right request params error: %s", err)
}
projectAccessRight, _, err := testClient.Projects.AddUpdateDeleteAccessRights(context.Background(), "MyProject", req)
if err != nil {
t.Errorf("project: add/update/delete access right error: %s", err)
}
// Doing one deep check to verify the mapping
if projectAccessRight.InheritsFrom.Name != "All-Projects" {
t.Errorf("projectAccessRight.InheritsFrom.Name not matching. Expected '%s', got '%s'", "All-Projects", projectAccessRight.InheritsFrom.Name)
}
}
func TestProjectsService_AccessCheck(t *testing.T) {
setup()
defer teardown()
testMux.HandleFunc("/projects/MyProject/check.access", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testQueryValues(t, r, testValues{
"account": "1000098",
"ref": "refs/heads/secret/bla",
})
// from: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#set-access
resp := `{"message": "user Kristen Burns \u003cKristen.Burns@gerritcodereview.com\u003e (1000098) cannot see ref refs/heads/secret/bla in project MyProject","status":403}`
_, err := fmt.Fprint(w, `)]}'`+"\n"+resp)
if err != nil {
t.Error(err)
}
})
var data = `{"account":"1000098","ref":"refs/heads/secret/bla"}`
var req = new(gerrit.CheckAccessOptions)
if err := json.Unmarshal([]byte(data), &req); err != nil {
t.Errorf("project: access check request params error: %s", err)
}
accessCheckInfo, _, err := testClient.Projects.CheckAccess(context.Background(), "MyProject", req)
if err != nil {
t.Errorf("project: access check error: %s", err)
}
// Doing one deep check to verify the mapping
if accessCheckInfo.Status != 403 {
t.Errorf("accessCheckInfo.Status not matching. Expected '%d', got '%d'", 403, accessCheckInfo.Status)
}
}
func TestProjectsService_CreateAccessChange(t *testing.T) {
setup()
defer teardown()
testMux.HandleFunc("/projects/MyProject/access:review", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
// from: https://gerrit-review.googlesource.com/Documentation/rest-api-projects.html#create-access-change
resp := `{"id":"testproj~refs%2Fmeta%2Fconfig~Ieaf185bf90a1fc3b58461e399385e158a20b31a2","project":"testproj","branch":"refs/meta/config","hashtags":[],"change_id":"Ieaf185bf90a1fc3b58461e399385e158a20b31a2","subject":"Reviewaccesschange","status":"NEW","created":"2017-09-07 14:31:11.852000000","updated":"2017-09-07 14:31:11.852000000","submit_type":"CHERRY_PICK","mergeable":true,"insertions":2,"deletions":0,"unresolved_comment_count":0,"has_review_started":true,"_number":7,"owner":{"_account_id":1000000}}`
_, err := fmt.Fprint(w, `)]}'`+"\n"+resp)
if err != nil {
t.Error(err)
}
})
var data = `{"add":{"refs/heads/*":{"permissions":{"read":{"rules":{"global:Anonymous-Users":{"action":"DENY","force":false}}}}}}}`
var req = new(gerrit.ProjectAccessInput)
if err := json.Unmarshal([]byte(data), &req); err != nil {
t.Errorf("project: create access change request params error: %s", err)
}
changeInfo, _, err := testClient.Projects.CreateAccessRightChange(context.Background(), "MyProject", req)
if err != nil {
t.Errorf("project: create access change error: %s", err)
}
// Doing one deep check to verify the mapping
if changeInfo.ChangeID != "Ieaf185bf90a1fc3b58461e399385e158a20b31a2" {
t.Errorf("changeInfo.ChangeID not matching. Expected '%s', got '%s'", "Ieaf185bf90a1fc3b58461e399385e158a20b31a2", changeInfo.ChangeID)
}
}