https://github.com/jaredallard/gitlab
go-gitlab wrapper that supports mocking
https://github.com/jaredallard/gitlab
gitlab go golang golang-library
Last synced: 8 days ago
JSON representation
go-gitlab wrapper that supports mocking
- Host: GitHub
- URL: https://github.com/jaredallard/gitlab
- Owner: jaredallard
- License: lgpl-3.0
- Fork: true (1Password/gitlab)
- Created: 2025-05-18T02:40:22.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-05-18T02:41:16.000Z (8 months ago)
- Last Synced: 2025-09-29T01:29:25.781Z (4 months ago)
- Homepage:
- Size: 683 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
Awesome Lists containing this project
README
# gitlab
Wrapper for [go-gitlab]
([gitlab.com/gitlab-org/api/client-go](gitlab.com/gitlab-org/api/client-go))
that supports mocking.
## Usage
See our [Go docs](https://pkg.go.dev/github.com/1password/gitlab) as
well as the upstream [go-gitlab] documentation which this package
provides.
### Differences
Due to the original [go-gitlab] `Client` struct using embedded structs
instead of interfaces, you must use the `NewClient` call from this
package.
Example:
```go
gl, err := gitlab.NewClient()
if err != nil {
// handle err
}
// Original
gl.MergeRequests.GetMergeRequest()
// New
gl.MergeRequests().GetMergeRequest()
```
You will also need to dereference `gitlab.Client` as it is now and
interface instead of a struct.
```go
// Original
type MyStruct {
gl *gitlab.Client
}
// New
type MyStruct {
gl gitlab.Client
}
```
### Using the mocks
All of the mocks are generated via [mockgen] under the hood. You can
access them on the `MockClient` type.
Example:
```go
func TestCanGetMergeRequest(t *testing.T) {
gl := gitlab.NewMockClient(t)
// Should be called once w/ the given arguments and return the given
// result.
gl.MergeRequestsServiceMock.EXPECT().
GetMergeRequest(1, 1, &gitlab.GetMergeRequestsOptions{}).
Return(&gitlab.MergeRequest{
ID: 1,
}, nil, nil)
mr, _, err := gl.MergeRequests().GetMergeRequest(1, 1, &gitlab.GetMergeRequestsOptions{})
assert.NilError(t, err)
assert.Equal(t, mr.ID, 1)
}
```
## Development
All of the code in this repository is generated through the
`tools/codegen` CLI. To change anything, you must add it to that CLI
tool.
The templates used can be found in the `embed` directory in the same CLI
directory.
When you bump dependency versions — specifically, the client-go package — be
sure to run `mise generate` to pull in the latest changes to the package.
## Special Thanks
Huge special thanks to the [mockgen] and [ifacemaker] project for making
this possible and saving me a lot of pain w/ the ast package :)
## License
LGPL-3.0
[go-gitlab]: gitlab.com/gitlab-org/api/client-go
[mockgen]: https://pkg.go.dev/go.uber.org/mock/mockgen
[ifacemaker]: https://github.com/vburenin/ifacemaker@latest