From d76d67de234df06dc4742a7d0d2d60070fb32fba Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Fri, 3 Mar 2017 22:35:42 +0800 Subject: [PATCH] feat: expose url field on issue api. (#982) * Add api url func. Signed-off-by: Bo-Yi Wu * fix: Add unit testing. * fix: conflicts * fix: remove trim * fix: revert test function name. --- models/issue.go | 7 +++++++ models/issue_test.go | 9 +++++++++ models/repo.go | 5 +++++ models/repo_test.go | 7 +++++++ 4 files changed, 28 insertions(+) diff --git a/models/issue.go b/models/issue.go index ca01ffe2f..c740d8fec 100644 --- a/models/issue.go +++ b/models/issue.go @@ -7,6 +7,7 @@ package models import ( "errors" "fmt" + "path" "sort" "strings" "time" @@ -200,6 +201,11 @@ func (issue *Issue) GetIsRead(userID int64) error { return nil } +// APIURL returns the absolute APIURL to this issue. +func (issue *Issue) APIURL() string { + return issue.Repo.APIURL() + "/" + path.Join("issues", fmt.Sprint(issue.ID)) +} + // HTMLURL returns the absolute URL to this issue. func (issue *Issue) HTMLURL() string { var path string @@ -246,6 +252,7 @@ func (issue *Issue) APIFormat() *api.Issue { apiIssue := &api.Issue{ ID: issue.ID, + URL: issue.APIURL(), Index: issue.Index, Poster: issue.Poster.APIFormat(), Title: issue.Title, diff --git a/models/issue_test.go b/models/issue_test.go index 646a1a5a9..a6da80917 100644 --- a/models/issue_test.go +++ b/models/issue_test.go @@ -33,3 +33,12 @@ func TestIssue_ReplaceLabels(t *testing.T) { testSuccess(1, []int64{1, 2}) testSuccess(1, []int64{}) } + +func TestIssueAPIURL(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + issue := AssertExistsAndLoadBean(t, &Issue{ID: 1}).(*Issue) + err := issue.LoadAttributes() + + assert.NoError(t, err) + assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/issues/1", issue.APIURL()) +} diff --git a/models/repo.go b/models/repo.go index d72d3d1da..8361780bf 100644 --- a/models/repo.go +++ b/models/repo.go @@ -264,6 +264,11 @@ func (repo *Repository) HTMLURL() string { return setting.AppURL + repo.FullName() } +// APIURL returns the repository API URL +func (repo *Repository) APIURL() string { + return setting.AppURL + path.Join("api/v1/repos", repo.FullName()) +} + // APIFormat converts a Repository to api.Repository func (repo *Repository) APIFormat(mode AccessMode) *api.Repository { cloneLink := repo.CloneLink() diff --git a/models/repo_test.go b/models/repo_test.go index 7c0e94a5a..a538d44c0 100644 --- a/models/repo_test.go +++ b/models/repo_test.go @@ -125,3 +125,10 @@ func TestForkRepository(t *testing.T) { assert.Error(t, err) assert.True(t, IsErrRepoAlreadyExist(err)) } + +func TestRepoAPIURL(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + repo := AssertExistsAndLoadBean(t, &Repository{ID: 10}).(*Repository) + + assert.Equal(t, "https://try.gitea.io/api/v1/repos/user12/repo10", repo.APIURL()) +}