Skip to content

Commit 39bce07

Browse files
committed
Refactor…
1 parent 3f26370 commit 39bce07

5 files changed

+132
-170
lines changed

fixtures_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ package gitlab
1919
const (
2020
// exampleChangelogResponse provides fixture for Changelog tests.
2121
exampleChangelogResponse = `{
22-
"notes": "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n- [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf) ([merge request](namespace13/project13!2))\n- [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8) ([merge request](namespace13/project13!1))\n"
23-
}`
22+
"notes": "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n- [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf) ([merge request](namespace13/project13!2))\n- [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8) ([merge request](namespace13/project13!1))\n"
23+
}`
24+
2425
// exampleCommitMessage provides fixture for a commit message.
2526
exampleCommitMessage = "Merge branch 'some-feature' into 'master'\n\nRelease v1.0.0\n\nSee merge request jsmith/example!1"
2627

repositories.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,90 @@ func (s *RepositoriesService) MergeBase(pid interface{}, opt *MergeBaseOptions,
330330

331331
return c, resp, err
332332
}
333+
334+
// AddChangelogOptions represents the available AddChangelog() options.
335+
//
336+
// GitLab API docs:
337+
// https://docs.gitlab.com/ee/api/repositories.html#add-changelog-data-to-a-changelog-file
338+
type AddChangelogOptions struct {
339+
Version *string `url:"version,omitempty" json:"version,omitempty"`
340+
Branch *string `url:"branch,omitempty" json:"branch,omitempty"`
341+
ConfigFile *string `url:"config_file,omitempty" json:"config_file,omitempty"`
342+
Date *ISOTime `url:"date,omitempty" json:"date,omitempty"`
343+
File *string `url:"file,omitempty" json:"file,omitempty"`
344+
From *string `url:"from,omitempty" json:"from,omitempty"`
345+
Message *string `url:"message,omitempty" json:"message,omitempty"`
346+
To *string `url:"to,omitempty" json:"to,omitempty"`
347+
Trailer *string `url:"trailer,omitempty" json:"trailer,omitempty"`
348+
}
349+
350+
// AddChangelog generates changelog data based on commits in a repository.
351+
//
352+
// Gitlab API docs:
353+
// https://docs.gitlab.com/ee/api/repositories.html#add-changelog-data-to-a-changelog-file
354+
func (s *RepositoriesService) AddChangelog(pid interface{}, opt *AddChangelogOptions, options ...RequestOptionFunc) (*Response, error) {
355+
project, err := parseID(pid)
356+
if err != nil {
357+
return nil, err
358+
}
359+
u := fmt.Sprintf("projects/%s/repository/changelog", PathEscape(project))
360+
361+
req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
362+
if err != nil {
363+
return nil, err
364+
}
365+
366+
return s.client.Do(req, nil)
367+
}
368+
369+
// ChangelogData represents the generated changelog data.
370+
//
371+
// GitLab API docs:
372+
// https://docs.gitlab.com/ee/api/repositories.html#generate-changelog-data
373+
type ChangelogData struct {
374+
Notes string `json:"notes"`
375+
}
376+
377+
func (c ChangelogData) String() string {
378+
return Stringify(c)
379+
}
380+
381+
// GenerateChangelogDataOptions represents the available GenerateChangelogData()
382+
// options.
383+
//
384+
// GitLab API docs:
385+
// https://docs.gitlab.com/ee/api/repositories.html#generate-changelog-data
386+
type GenerateChangelogDataOptions struct {
387+
Version *string `url:"version,omitempty" json:"version,omitempty"`
388+
ConfigFile *string `url:"config_file,omitempty" json:"config_file,omitempty"`
389+
Date *ISOTime `url:"date,omitempty" json:"date,omitempty"`
390+
From *string `url:"from,omitempty" json:"from,omitempty"`
391+
To *string `url:"to,omitempty" json:"to,omitempty"`
392+
Trailer *string `url:"trailer,omitempty" json:"trailer,omitempty"`
393+
}
394+
395+
// GenerateChangelogData generates changelog data based on commits in a
396+
// repository, without committing them to a changelog file.
397+
//
398+
// Gitlab API docs:
399+
// https://docs.gitlab.com/ee/api/repositories.html#generate-changelog-data
400+
func (s *RepositoriesService) GenerateChangelogData(pid interface{}, opt GenerateChangelogDataOptions, options ...RequestOptionFunc) (*ChangelogData, *Response, error) {
401+
project, err := parseID(pid)
402+
if err != nil {
403+
return nil, nil, err
404+
}
405+
u := fmt.Sprintf("projects/%s/repository/changelog", project)
406+
407+
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
408+
if err != nil {
409+
return nil, nil, err
410+
}
411+
412+
cd := new(ChangelogData)
413+
resp, err := s.client.Do(req, cd)
414+
if err != nil {
415+
return nil, resp, err
416+
}
417+
418+
return cd, resp, err
419+
}

repositories_changelog.go

Lines changed: 0 additions & 102 deletions
This file was deleted.

repositories_changelog_test.go

Lines changed: 0 additions & 66 deletions
This file was deleted.

repositories_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"net/http"
66
"testing"
77

8+
"github.com/stretchr/testify/assert"
89
"github.com/stretchr/testify/require"
910
)
1011

@@ -388,3 +389,44 @@ func TestRepositoriesService_MergeBase(t *testing.T) {
388389
require.Nil(t, c)
389390
require.Equal(t, http.StatusNotFound, resp.StatusCode)
390391
}
392+
393+
func TestAddChangelogData(t *testing.T) {
394+
mux, client := setup(t)
395+
396+
mux.HandleFunc("/api/v4/projects/1/repository/changelog",
397+
func(w http.ResponseWriter, r *http.Request) {
398+
testMethod(t, r, http.MethodPost)
399+
w.WriteHeader(http.StatusOK)
400+
})
401+
402+
resp, err := client.Repositories.AddChangelog(
403+
1,
404+
&AddChangelogOptions{
405+
Version: String("1.0.0"),
406+
})
407+
require.NoError(t, err)
408+
assert.Equal(t, http.StatusOK, resp.StatusCode)
409+
}
410+
411+
func TestGenerateChangelogData(t *testing.T) {
412+
mux, client := setup(t)
413+
414+
mux.HandleFunc("/api/v4/projects/1/repository/changelog",
415+
func(w http.ResponseWriter, r *http.Request) {
416+
testMethod(t, r, http.MethodGet)
417+
fmt.Fprint(w, exampleChangelogResponse)
418+
})
419+
420+
want := &ChangelogData{
421+
Notes: "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n- [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf) ([merge request](namespace13/project13!2))\n- [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8) ([merge request](namespace13/project13!1))\n",
422+
}
423+
424+
notes, _, err := client.Repositories.GenerateChangelogData(
425+
1,
426+
GenerateChangelogDataOptions{
427+
Version: String("1.0.0"),
428+
},
429+
)
430+
require.NoError(t, err)
431+
assert.Equal(t, want, notes)
432+
}

0 commit comments

Comments
 (0)