Files
atlantis/vendor/github.com/lkysow/go-gitlab/projects_test.go
Luke Kysow fa43febf60 Gitlab (#190)
Gitlab initial implementation
2017-11-16 13:22:28 -08:00

236 lines
6.1 KiB
Go

package gitlab
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"reflect"
"strings"
"testing"
)
func TestListProjects(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `[{"id":1},{"id":2}]`)
})
opt := &ListProjectsOptions{
ListOptions: ListOptions{2, 3},
Archived: Bool(true),
OrderBy: String("name"),
Sort: String("asc"),
Search: String("query"),
Simple: Bool(true),
Visibility: Visibility(PublicVisibility),
}
projects, _, err := client.Projects.ListProjects(opt)
if err != nil {
t.Errorf("Projects.ListProjects returned error: %v", err)
}
want := []*Project{{ID: 1}, {ID: 2}}
if !reflect.DeepEqual(want, projects) {
t.Errorf("Projects.ListProjects returned %+v, want %+v", projects, want)
}
}
func TestListUserProjects(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/users/1/projects", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `[{"id":1},{"id":2}]`)
})
opt := &ListProjectsOptions{
ListOptions: ListOptions{2, 3},
Archived: Bool(true),
OrderBy: String("name"),
Sort: String("asc"),
Search: String("query"),
Simple: Bool(true),
Visibility: Visibility(PublicVisibility),
}
projects, _, err := client.Projects.ListUserProjects(1, opt)
if err != nil {
t.Errorf("Projects.ListUserProjects returned error: %v", err)
}
want := []*Project{{ID: 1}, {ID: 2}}
if !reflect.DeepEqual(want, projects) {
t.Errorf("Projects.ListUserProjects returned %+v, want %+v", projects, want)
}
}
func TestListOwnedProjects(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `[{"id":1},{"id":2}]`)
})
opt := &ListProjectsOptions{
ListOptions: ListOptions{2, 3},
Archived: Bool(true),
OrderBy: String("name"),
Sort: String("asc"),
Search: String("query"),
Simple: Bool(true),
Owned: Bool(true),
Visibility: Visibility(PublicVisibility),
}
projects, _, err := client.Projects.ListProjects(opt)
if err != nil {
t.Errorf("Projects.ListOwnedProjects returned error: %v", err)
}
want := []*Project{{ID: 1}, {ID: 2}}
if !reflect.DeepEqual(want, projects) {
t.Errorf("Projects.ListOwnedProjects returned %+v, want %+v", projects, want)
}
}
func TestListStarredProjects(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `[{"id":1},{"id":2}]`)
})
opt := &ListProjectsOptions{
ListOptions: ListOptions{2, 3},
Archived: Bool(true),
OrderBy: String("name"),
Sort: String("asc"),
Search: String("query"),
Simple: Bool(true),
Starred: Bool(true),
Visibility: Visibility(PublicVisibility),
}
projects, _, err := client.Projects.ListProjects(opt)
if err != nil {
t.Errorf("Projects.ListStarredProjects returned error: %v", err)
}
want := []*Project{{ID: 1}, {ID: 2}}
if !reflect.DeepEqual(want, projects) {
t.Errorf("Projects.ListStarredProjects returned %+v, want %+v", projects, want)
}
}
func TestGetProject_byID(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects/1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1}`)
})
want := &Project{ID: 1}
project, _, err := client.Projects.GetProject(1)
if err != nil {
t.Fatalf("Projects.GetProject returns an error: %v", err)
}
if !reflect.DeepEqual(want, project) {
t.Errorf("Projects.GetProject returned %+v, want %+v", project, want)
}
}
func TestGetProject_byName(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects/", func(w http.ResponseWriter, r *http.Request) {
testURL(t, r, "/projects/namespace%2Fname")
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1}`)
})
want := &Project{ID: 1}
project, _, err := client.Projects.GetProject("namespace/name")
if err != nil {
t.Fatalf("Projects.GetProject returns an error: %v", err)
}
if !reflect.DeepEqual(want, project) {
t.Errorf("Projects.GetProject returned %+v, want %+v", project, want)
}
}
func TestCreateProject(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
mux.HandleFunc("/projects", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
fmt.Fprint(w, `{"id":1}`)
})
opt := &CreateProjectOptions{Name: String("n")}
project, _, err := client.Projects.CreateProject(opt)
if err != nil {
t.Errorf("Projects.CreateProject returned error: %v", err)
}
want := &Project{ID: 1}
if !reflect.DeepEqual(want, project) {
t.Errorf("Projects.CreateProject returned %+v, want %+v", project, want)
}
}
func TestUploadFile(t *testing.T) {
mux, server, client := setup()
defer teardown(server)
tf, _ := ioutil.TempFile(os.TempDir(), "test")
defer os.Remove(tf.Name())
mux.HandleFunc("/projects/1/uploads", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodPost)
if false == strings.Contains(r.Header.Get("Content-Type"), "multipart/form-data;") {
t.Fatalf("Prokects.UploadFile request content-type %+v want multipart/form-data;", r.Header.Get("Content-Type"))
}
if r.ContentLength == -1 {
t.Fatalf("Prokects.UploadFile request content-length is -1")
}
fmt.Fprint(w, `{
"alt": "dk",
"url": "/uploads/66dbcd21ec5d24ed6ea225176098d52b/dk.md",
"markdown": "![dk](/uploads/66dbcd21ec5d24ed6ea225176098d52b/dk.png)"
}`)
})
want := &ProjectFile{
Alt: "dk",
URL: "/uploads/66dbcd21ec5d24ed6ea225176098d52b/dk.md",
Markdown: "![dk](/uploads/66dbcd21ec5d24ed6ea225176098d52b/dk.png)",
}
file, _, err := client.Projects.UploadFile(1, tf.Name())
if err != nil {
t.Fatalf("Prokects.UploadFile returns an error: %v", err)
}
if !reflect.DeepEqual(want, file) {
t.Errorf("Prokects.UploadFile returned %+v, want %+v", file, want)
}
}