summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorBo-Yi Wu <appleboy.tw@gmail.com>2017-03-03 22:35:42 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2017-03-03 22:35:42 +0800
commitd76d67de234df06dc4742a7d0d2d60070fb32fba (patch)
tree9a96b915ba13b6064e7c46fbaaf47ed4dac9a58f /models
parent0afab876311a35c56a23b1f7903f9247d5673c8a (diff)
downloadgitea-d76d67de234df06dc4742a7d0d2d60070fb32fba.tar.gz
gitea-d76d67de234df06dc4742a7d0d2d60070fb32fba.zip
feat: expose url field on issue api. (#982)
* Add api url func. Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> * fix: Add unit testing. * fix: conflicts * fix: remove trim * fix: revert test function name.
Diffstat (limited to 'models')
-rw-r--r--models/issue.go7
-rw-r--r--models/issue_test.go9
-rw-r--r--models/repo.go5
-rw-r--r--models/repo_test.go7
4 files changed, 28 insertions, 0 deletions
diff --git a/models/issue.go b/models/issue.go
index ca01ffe2fa..c740d8fec4 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 646a1a5a9a..a6da80917e 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 d72d3d1da2..8361780bfd 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 7c0e94a5ae..a538d44c0e 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())
+}