Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
go-gitlab
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
go-gitlab
Commits
0436cb25
Commit
0436cb25
authored
Nov 24, 2015
by
Sander van Harmelen
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #20 from martinsefcik/tests
Rewritten tests
parents
8e3e25a1
cf47d4b1
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
341 additions
and
240 deletions
+341
-240
README.md
README.md
+1
-1
gitlab.go
gitlab.go
+2
-4
gitlab_test.go
gitlab_test.go
+114
-0
helper_test.go
helper_test.go
+0
-17
projects.go
projects.go
+52
-58
projects_test.go
projects_test.go
+172
-25
index.json
stubs/projects/index.json
+0
-84
show.json
stubs/projects/show.json
+0
-51
No files found.
README.md
View file @
0436cb25
...
...
@@ -3,7 +3,7 @@
A GitLab API client enabling Go programs to interact with GitLab in a simple and uniform way
**Documentation:**
[
![GoDoc
](
https://godoc.org/github.com/xanzy/go-gitlab?status.svg
)
](https://godoc.org/github.com/xanzy/go-gitlab)
**Build Status:**
[
![Build Status
](
https://travis-ci.org/xanzy/go-gitlab.svg?branch=master
)
](https://travis-ci.org/xanzy/go-gitlab)
**Build Status:**
[
![Build Status
](
https://travis-ci.org/xanzy/go-gitlab.svg?branch=master
)
](https://travis-ci.org/xanzy/go-gitlab)
## Coverage
...
...
gitlab.go
View file @
0436cb25
...
...
@@ -187,9 +187,6 @@ func (c *Client) SetBaseURL(urlStr string) error {
return
err
}
// Set the encoded opaque data
c
.
baseURL
.
Opaque
=
c
.
baseURL
.
Path
return
nil
}
...
...
@@ -200,7 +197,8 @@ func (c *Client) SetBaseURL(urlStr string) error {
// request body.
func
(
c
*
Client
)
NewRequest
(
method
,
path
string
,
opt
interface
{})
(
*
http
.
Request
,
error
)
{
u
:=
*
c
.
baseURL
u
.
Opaque
+=
path
// Set the encoded opaque data
u
.
Opaque
=
c
.
baseURL
.
Path
+
path
q
,
err
:=
query
.
Values
(
opt
)
if
err
!=
nil
{
...
...
gitlab_test.go
0 → 100644
View file @
0436cb25
package
gitlab
import
(
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"reflect"
"strings"
"testing"
)
// setup sets up a test HTTP server along with a gitlab.Client that is
// configured to talk to that test server. Tests should register handlers on
// mux which provide mock responses for the API method being tested.
func
setup
()
(
*
http
.
ServeMux
,
*
httptest
.
Server
,
*
Client
)
{
// mux is the HTTP request multiplexer used with the test server.
mux
:=
http
.
NewServeMux
()
// server is a test HTTP server used to provide mock API responses.
server
:=
httptest
.
NewServer
(
mux
)
// client is the Gitlab client being tested.
client
:=
NewClient
(
nil
,
""
)
client
.
SetBaseURL
(
server
.
URL
)
return
mux
,
server
,
client
}
// teardown closes the test HTTP server.
func
teardown
(
server
*
httptest
.
Server
)
{
server
.
Close
()
}
func
testUrl
(
t
*
testing
.
T
,
r
*
http
.
Request
,
want
string
)
{
if
got
:=
r
.
RequestURI
;
got
!=
want
{
t
.
Errorf
(
"Request url: %+v, want %s"
,
got
,
want
)
}
}
func
testMethod
(
t
*
testing
.
T
,
r
*
http
.
Request
,
want
string
)
{
if
got
:=
r
.
Method
;
got
!=
want
{
t
.
Errorf
(
"Request method: %s, want %s"
,
got
,
want
)
}
}
type
values
map
[
string
]
string
func
testFormValues
(
t
*
testing
.
T
,
r
*
http
.
Request
,
values
values
)
{
want
:=
url
.
Values
{}
for
k
,
v
:=
range
values
{
want
.
Add
(
k
,
v
)
}
r
.
ParseForm
()
if
got
:=
r
.
Form
;
!
reflect
.
DeepEqual
(
got
,
want
)
{
t
.
Errorf
(
"Request parameters: %v, want %v"
,
got
,
want
)
}
}
func
testHeader
(
t
*
testing
.
T
,
r
*
http
.
Request
,
header
string
,
want
string
)
{
if
got
:=
r
.
Header
.
Get
(
header
);
got
!=
want
{
t
.
Errorf
(
"Header.Get(%q) returned %s, want %s"
,
header
,
got
,
want
)
}
}
func
testBody
(
t
*
testing
.
T
,
r
*
http
.
Request
,
want
string
)
{
b
,
err
:=
ioutil
.
ReadAll
(
r
.
Body
)
if
err
!=
nil
{
t
.
Errorf
(
"Error reading request body: %v"
,
err
)
}
if
got
:=
string
(
b
);
got
!=
want
{
t
.
Errorf
(
"request Body is %s, want %s"
,
got
,
want
)
}
}
func
responseBody
(
w
http
.
ResponseWriter
,
filename
string
)
{
body
,
_
:=
ioutil
.
ReadFile
(
filename
)
w
.
Write
([]
byte
(
body
))
}
func
TestNewClient
(
t
*
testing
.
T
)
{
c
:=
NewClient
(
nil
,
""
)
if
c
.
BaseURL
()
.
String
()
!=
defaultBaseURL
{
t
.
Errorf
(
"NewClient BaseURL is %s, want %s"
,
c
.
BaseURL
()
.
String
(),
defaultBaseURL
)
}
if
c
.
UserAgent
!=
userAgent
{
t
.
Errorf
(
"NewClient UserAgent is %s, want %s"
,
c
.
UserAgent
,
userAgent
)
}
}
func
TestCheckResponse
(
t
*
testing
.
T
)
{
res
:=
&
http
.
Response
{
Request
:
&
http
.
Request
{},
StatusCode
:
http
.
StatusBadRequest
,
Body
:
ioutil
.
NopCloser
(
strings
.
NewReader
(
`{"message":"m",
"errors": [{"resource": "r", "field": "f", "code": "c"}]}`
)),
}
err
:=
CheckResponse
(
res
)
.
(
*
ErrorResponse
)
if
err
==
nil
{
t
.
Errorf
(
"Expected error response."
)
}
want
:=
&
ErrorResponse
{
Response
:
res
,
Message
:
"m"
,
Errors
:
[]
Error
{{
Resource
:
"r"
,
Field
:
"f"
,
Code
:
"c"
}},
}
if
!
reflect
.
DeepEqual
(
err
,
want
)
{
t
.
Errorf
(
"Error = %#v, want %#v"
,
err
,
want
)
}
}
helper_test.go
deleted
100644 → 0
View file @
8e3e25a1
package
gitlab
import
(
"io/ioutil"
"net/http"
"net/http/httptest"
)
func
Stub
(
filename
string
)
(
*
httptest
.
Server
,
*
Client
)
{
stub
,
_
:=
ioutil
.
ReadFile
(
filename
)
ts
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
Write
([]
byte
(
stub
))
}))
client
:=
NewClient
(
nil
,
""
)
client
.
SetBaseURL
(
ts
.
URL
)
return
ts
,
client
}
projects.go
View file @
0436cb25
...
...
@@ -34,38 +34,56 @@ type ProjectsService struct {
//
// GitLab API docs: http://doc.gitlab.com/ce/api/projects.html
type
Project
struct
{
ID
int
`json:"id"`
Description
interface
{}
`json:"description"`
DefaultBranch
string
`json:"default_branch"`
Public
bool
`json:"public"`
VisibilityLevel
VisibilityLevel
`json:"visibility_level"`
SSHURLToRepo
string
`json:"ssh_url_to_repo"`
HTTPURLToRepo
string
`json:"http_url_to_repo"`
WebURL
string
`json:"web_url"`
TagList
[]
string
`json:"tag_list"`
Owner
*
User
`json:"owner"`
Name
string
`json:"name"`
NameWithNamespace
string
`json:"name_with_namespace"`
Path
string
`json:"path"`
PathWithNamespace
string
`json:"path_with_namespace"`
IssuesEnabled
bool
`json:"issues_enabled"`
MergeRequestsEnabled
bool
`json:"merge_requests_enabled"`
WikiEnabled
bool
`json:"wiki_enabled"`
SnippetsEnabled
bool
`json:"snippets_enabled"`
CreatedAt
time
.
Time
`json:"created_at"`
LastActivityAt
time
.
Time
`json:"last_activity_at"`
CreatorID
int
`json:"creator_id"`
Namespace
struct
{
CreatedAt
time
.
Time
`json:"created_at"`
Description
string
`json:"description"`
ID
int
`json:"id"`
Name
string
`json:"name"`
OwnerID
int
`json:"owner_id"`
Path
string
`json:"path"`
UpdatedAt
time
.
Time
`json:"updated_at"`
}
`json:"namespace"`
Archived
bool
`json:"archived"`
AvatarURL
string
`json:"avatar_url"`
ID
*
int
`json:"id"`
Description
*
string
`json:"description"`
DefaultBranch
*
string
`json:"default_branch"`
Public
*
bool
`json:"public"`
VisibilityLevel
*
VisibilityLevel
`json:"visibility_level"`
SSHURLToRepo
*
string
`json:"ssh_url_to_repo"`
HTTPURLToRepo
*
string
`json:"http_url_to_repo"`
WebURL
*
string
`json:"web_url"`
TagList
*
[]
string
`json:"tag_list"`
Owner
*
User
`json:"owner"`
Name
*
string
`json:"name"`
NameWithNamespace
*
string
`json:"name_with_namespace"`
Path
*
string
`json:"path"`
PathWithNamespace
*
string
`json:"path_with_namespace"`
IssuesEnabled
*
bool
`json:"issues_enabled"`
MergeRequestsEnabled
*
bool
`json:"merge_requests_enabled"`
WikiEnabled
*
bool
`json:"wiki_enabled"`
SnippetsEnabled
*
bool
`json:"snippets_enabled"`
CreatedAt
*
time
.
Time
`json:"created_at,omitempty"`
LastActivityAt
*
time
.
Time
`json:"last_activity_at,omitempty"`
CreatorID
*
int
`json:"creator_id"`
Namespace
*
ProjectNamespace
`json:"namespace"`
Archived
*
bool
`json:"archived"`
AvatarURL
*
string
`json:"avatar_url"`
Permissions
*
Permissions
`json:"permissions"`
}
type
ProjectNamespace
struct
{
CreatedAt
*
time
.
Time
`json:"created_at"`
Description
*
string
`json:"description"`
ID
*
int
`json:"id"`
Name
*
string
`json:"name"`
OwnerID
*
int
`json:"owner_id"`
Path
*
string
`json:"path"`
UpdatedAt
*
time
.
Time
`json:"updated_at"`
}
type
Permissions
struct
{
ProjectAccess
*
ProjectAccess
`json:"project_access"`
GroupAccess
*
GroupAccess
`json:"group_access"`
}
type
ProjectAccess
struct
{
AccessLevel
AccessLevel
`json:"access_level"`
NotificationLevel
NotificationLevel
`json:"notification_level"`
}
type
GroupAccess
struct
{
AccessLevel
AccessLevel
`json:"access_level"`
NotificationLevel
NotificationLevel
`json:"notification_level"`
}
func
(
s
Project
)
String
()
string
{
...
...
@@ -142,36 +160,12 @@ func (s *ProjectsService) ListAllProjects(opt *ListProjectsOptions) ([]*Project,
return
p
,
resp
,
err
}
// ProjectWithAccess represents a GitLab project with permissions attributes.
//
// GitLab API docs:
// http://doc.gitlab.com/ce/api/projects.html#get-single-project
type
ProjectWithAccess
struct
{
Project
Permissions
*
Permissions
`json:"permissions"`
}
type
Permissions
struct
{
ProjectAccess
*
ProjectAccess
`json:"project_access"`
GroupAccess
*
GroupAccess
`json:"group_access"`
}
type
ProjectAccess
struct
{
AccessLevel
AccessLevel
`json:"access_level"`
NotificationLevel
NotificationLevel
`json:"notification_level"`
}
type
GroupAccess
struct
{
AccessLevel
AccessLevel
`json:"access_level"`
NotificationLevel
NotificationLevel
`json:"notification_level"`
}
// GetProject gets a specific project, identified by project ID or
// NAMESPACE/PROJECT_NAME, which is owned by the authenticated user.
//
// GitLab API docs:
// http://doc.gitlab.com/ce/api/projects.html#get-single-project
func
(
s
*
ProjectsService
)
GetProject
(
pid
interface
{})
(
*
Project
WithAccess
,
*
Response
,
error
)
{
func
(
s
*
ProjectsService
)
GetProject
(
pid
interface
{})
(
*
Project
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
...
...
@@ -183,7 +177,7 @@ func (s *ProjectsService) GetProject(pid interface{}) (*ProjectWithAccess, *Resp
return
nil
,
nil
,
err
}
p
:=
new
(
Project
WithAccess
)
p
:=
new
(
Project
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
p
)
if
err
!=
nil
{
return
nil
,
resp
,
err
...
...
projects_test.go
View file @
0436cb25
package
gitlab
import
(
"fmt"
"net/http"
"reflect"
"testing"
)
func
TestList
All
Projects
(
t
*
testing
.
T
)
{
ts
,
client
:=
Stub
(
"stubs/projects/index.json"
)
defer
t
s
.
Close
(
)
func
TestListProjects
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
(
)
defer
t
eardown
(
server
)
opt
:=
&
ListProjectsOptions
{}
projects
,
_
,
err
:=
client
.
Projects
.
ListAllProjects
(
opt
)
mux
.
HandleFunc
(
"/projects"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
testFormValues
(
t
,
r
,
values
{
"page"
:
"2"
,
"per_page"
:
"3"
,
"archived"
:
"true"
,
"order_by"
:
"name"
,
"sort"
:
"asc"
,
"search"
:
"query"
,
"ci_enabled_first"
:
"true"
,
})
fmt
.
Fprint
(
w
,
`[{"id":1},{"id":2}]`
)
})
opt
:=
&
ListProjectsOptions
{
ListOptions
{
2
,
3
},
true
,
"name"
,
"asc"
,
"query"
,
true
}
projects
,
_
,
err
:=
client
.
Projects
.
ListProjects
(
opt
)
if
err
!=
nil
{
t
.
Fatalf
(
"Expected error nil, got
: %v"
,
err
)
t
.
Errorf
(
"Projects.ListProjects returned error
: %v"
,
err
)
}
count
:=
len
(
projects
)
if
count
!=
2
{
t
.
Errorf
(
"
Expected number of projects %q, got %q"
,
2
,
cou
nt
)
want
:=
[]
*
Project
{{
ID
:
Int
(
1
)},{
ID
:
Int
(
2
)}}
if
!
reflect
.
DeepEqual
(
want
,
projects
)
{
t
.
Errorf
(
"
Projects.ListProjects returned %+v, want %+v"
,
projects
,
wa
nt
)
}
if
projects
[
0
]
.
Name
!=
"project"
{
t
.
Errorf
(
"Expected project name %q, got %q"
,
"project"
,
projects
[
0
]
.
Name
)
}
func
TestListOwnedProjects
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/projects/owned"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
testFormValues
(
t
,
r
,
values
{
"page"
:
"2"
,
"per_page"
:
"3"
,
"archived"
:
"true"
,
"order_by"
:
"name"
,
"sort"
:
"asc"
,
"search"
:
"query"
,
"ci_enabled_first"
:
"true"
,
})
fmt
.
Fprint
(
w
,
`[{"id":1},{"id":2}]`
)
})
opt
:=
&
ListProjectsOptions
{
ListOptions
{
2
,
3
},
true
,
"name"
,
"asc"
,
"query"
,
true
}
projects
,
_
,
err
:=
client
.
Projects
.
ListOwnedProjects
(
opt
)
if
err
!=
nil
{
t
.
Errorf
(
"Projects.ListOwnedProjects returned error: %v"
,
err
)
}
if
projects
[
1
]
.
Name
!=
"project2"
{
t
.
Errorf
(
"Expected project name %q, got %q"
,
"project2"
,
projects
[
1
]
.
Name
)
want
:=
[]
*
Project
{{
ID
:
Int
(
1
)},{
ID
:
Int
(
2
)}}
if
!
reflect
.
DeepEqual
(
want
,
projects
)
{
t
.
Errorf
(
"Projects.ListOwnedProjects returned %+v, want %+v"
,
projects
,
want
)
}
}
func
TestGetProject
(
t
*
testing
.
T
)
{
ts
,
client
:=
Stub
(
"stubs/projects/show.json"
)
defer
ts
.
Close
()
func
TestListAllProjects
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/projects/all"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
testFormValues
(
t
,
r
,
values
{
"page"
:
"2"
,
"per_page"
:
"3"
,
"archived"
:
"true"
,
"order_by"
:
"name"
,
"sort"
:
"asc"
,
"search"
:
"query"
,
"ci_enabled_first"
:
"true"
,
})
fmt
.
Fprint
(
w
,
`[{"id":1},{"id":2}]`
)
})
opt
:=
&
ListProjectsOptions
{
ListOptions
{
2
,
3
},
true
,
"name"
,
"asc"
,
"query"
,
true
}
projects
,
_
,
err
:=
client
.
Projects
.
ListAllProjects
(
opt
)
if
err
!=
nil
{
t
.
Errorf
(
"Projects.ListAllProjects returned error: %v"
,
err
)
}
want
:=
[]
*
Project
{{
ID
:
Int
(
1
)},{
ID
:
Int
(
2
)}}
if
!
reflect
.
DeepEqual
(
want
,
projects
)
{
t
.
Errorf
(
"Projects.ListAllProjects 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
:
Int
(
1
)}
project
,
_
,
err
:=
client
.
Projects
.
GetProject
(
1
)
if
err
!=
nil
{
t
.
Fatalf
(
"Expected error nil, got: %v"
,
err
)
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
)
if
project
.
Name
!=
"project"
{
t
.
Errorf
(
"Expected project name %q, got %q"
,
"project"
,
project
.
Name
)
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
:
Int
(
1
)}
project
,
_
,
err
:=
client
.
Projects
.
GetProject
(
"namespace/name"
)
if
err
!=
nil
{
t
.
Fatalf
(
"Projects.GetProject returns an error: %v"
,
err
)
}
if
project
.
Namespace
.
Name
!=
"group"
{
t
.
Errorf
(
"Expected namespace name %q, got %q"
,
"group"
,
project
.
Namespace
.
Name
)
if
!
reflect
.
DeepEqual
(
want
,
project
)
{
t
.
Errorf
(
"Projects.GetProject returned %+v, want %+v"
,
project
,
want
)
}
if
project
.
Permissions
.
ProjectAccess
.
AccessLevel
!=
MasterPermissions
{
t
.
Errorf
(
"Expected project access level %q, got %q"
,
MasterPermissions
,
project
.
Permissions
.
ProjectAccess
.
AccessLevel
)
}
func
TestSearchProjects
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/projects/search/query"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
testFormValues
(
t
,
r
,
values
{
"page"
:
"2"
,
"per_page"
:
"3"
,
"order_by"
:
"name"
,
"sort"
:
"asc"
,
})
fmt
.
Fprint
(
w
,
`[{"id":1},{"id":2}]`
)
})
opt
:=
&
SearchProjectsOptions
{
ListOptions
{
2
,
3
},
"name"
,
"asc"
}
projects
,
_
,
err
:=
client
.
Projects
.
SearchProjects
(
"query"
,
opt
)
if
err
!=
nil
{
t
.
Errorf
(
"Projects.SearchProjects returned error: %v"
,
err
)
}
if
project
.
Permissions
.
GroupAccess
!=
nil
{
t
.
Errorf
(
"Expected project group access nil, got %q"
,
project
.
Permissions
.
GroupAccess
)
want
:=
[]
*
Project
{{
ID
:
Int
(
1
)},{
ID
:
Int
(
2
)}}
if
!
reflect
.
DeepEqual
(
want
,
projects
)
{
t
.
Errorf
(
"Projects.SearchProjects returned %+v, want %+v"
,
projects
,
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"
)
testFormValues
(
t
,
r
,
values
{
"name"
:
"n"
,
})
fmt
.
Fprint
(
w
,
`{"id":1}`
)
})
opt
:=
&
CreateProjectOptions
{
Name
:
"n"
}
project
,
_
,
err
:=
client
.
Projects
.
CreateProject
(
opt
)
if
err
!=
nil
{
t
.
Errorf
(
"Projects.CreateProject returned error: %v"
,
err
)
}
want
:=
&
Project
{
ID
:
Int
(
1
)}
if
!
reflect
.
DeepEqual
(
want
,
project
)
{
t
.
Errorf
(
"Projects.CreateProject returned %+v, want %+v"
,
project
,
want
)
}
}
\ No newline at end of file
stubs/projects/index.json
deleted
100644 → 0
View file @
8e3e25a1
[
{
"id"
:
12
,
"description"
:
""
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
false
,
"archived"
:
false
,
"visibility_level"
:
0
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:group/project"
,
"http_url_to_repo"
:
"https://gitlab.example.com/group/project.git"
,
"web_url"
:
"https://gitlab.example.com/group/project"
,
"name"
:
"project"
,
"name_with_namespace"
:
"group / project"
,
"path"
:
"project"
,
"path_with_namespace"
:
"group/project"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
false
,
"snippets_enabled"
:
false
,
"created_at"
:
"2015-10-26T14:32:44.103+01:00"
,
"last_activity_at"
:
"2015-11-01T22:07:47.456+01:00"
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
7
,
"name"
:
"group"
,
"path"
:
"group"
,
"owner_id"
:
null
,
"created_at"
:
"2015-10-26T13:36:40.147+01:00"
,
"updated_at"
:
"2015-10-27T08:57:55.199+01:00"
,
"description"
:
"group desc"
,
"avatar"
:
{
"url"
:
"/uploads/group/avatar/7/group-logo.png"
}
},
"avatar_url"
:
"https://gitlab.example.com/uploads/project/avatar/12/group-logo.png"
,
"star_count"
:
0
,
"forks_count"
:
0
},
{
"id"
:
11
,
"description"
:
""
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
false
,
"archived"
:
false
,
"visibility_level"
:
0
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:johndoe/project2.git"
,
"http_url_to_repo"
:
"https://gitlab.example.com/johndoe/project2.git"
,
"web_url"
:
"https://gitlab.example.com/johndoe/project2"
,
"owner"
:
{
"name"
:
"John Doe"
,
"username"
:
"johndoe"
,
"id"
:
1
,
"state"
:
"active"
,
"avatar_url"
:
"https://secure.gravatar.com/avatar/123"
,
"web_url"
:
"https://gitlab.example.com/u/johndoe"
},
"name"
:
"project2"
,
"name_with_namespace"
:
"John Doe / project2"
,
"path"
:
"project2"
,
"path_with_namespace"
:
"johndoe/project2"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
true
,
"snippets_enabled"
:
true
,
"created_at"
:
"2015-03-18T19:33:20.166+01:00"
,
"last_activity_at"
:
"2015-11-01T19:48:32.793+01:00"
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
1
,
"name"
:
"John Doe"
,
"path"
:
"johndoe"
,
"owner_id"
:
1
,
"created_at"
:
"2014-01-05T22:01:51.000+01:00"
,
"updated_at"
:
"2014-01-05T22:51:08.000+01:00"
,
"description"
:
""
,
"avatar"
:
null
},
"avatar_url"
:
null
,
"star_count"
:
0
,
"forks_count"
:
0
}
]
stubs/projects/show.json
deleted
100644 → 0
View file @
8e3e25a1
{
"id"
:
11
,
"description"
:
""
,
"default_branch"
:
"master"
,
"tag_list"
:
[],
"public"
:
false
,
"archived"
:
false
,
"visibility_level"
:
0
,
"ssh_url_to_repo"
:
"git@gitlab.example.com:group/project.git"
,
"http_url_to_repo"
:
"https://gitlab.example.com/group/project.git"
,
"web_url"
:
"https://gitlab.example.com/group/project"
,
"owner"
:
{
"name"
:
"John Doe"
,
"username"
:
"johndoe"
,
"id"
:
1
,
"state"
:
"active"
,
"avatar_url"
:
"https://secure.gravatar.com/avatar/123"
,
"web_url"
:
"https://gitlab.example.com/u/johndoe"
},
"name"
:
"project"
,
"name_with_namespace"
:
"Group / project"
,
"path"
:
"project"
,
"path_with_namespace"
:
"group/project"
,
"issues_enabled"
:
true
,
"merge_requests_enabled"
:
true
,
"wiki_enabled"
:
true
,
"snippets_enabled"
:
true
,
"created_at"
:
"2015-03-18T19:33:20.166+01:00"
,
"last_activity_at"
:
"2015-11-01T19:48:32.793+01:00"
,
"creator_id"
:
1
,
"namespace"
:
{
"id"
:
1
,
"name"
:
"group"
,
"path"
:
"group"
,
"owner_id"
:
1
,
"created_at"
:
"2014-01-05T22:01:51.000+01:00"
,
"updated_at"
:
"2014-01-05T22:51:08.000+01:00"
,
"description"
:
""
,
"avatar"
:
null
},
"avatar_url"
:
null
,
"star_count"
:
0
,
"forks_count"
:
0
,
"permissions"
:
{
"project_access"
:
{
"access_level"
:
40
,
"notification_level"
:
3
},
"group_access"
:
null
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment