summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--integrations/api_issue_subscription_test.go8
-rw-r--r--routers/api/v1/repo/issue_subscription.go21
-rw-r--r--templates/swagger/v1_json.tmpl10
3 files changed, 35 insertions, 4 deletions
diff --git a/integrations/api_issue_subscription_test.go b/integrations/api_issue_subscription_test.go
index 5d2956c4e0..d0b1921015 100644
--- a/integrations/api_issue_subscription_test.go
+++ b/integrations/api_issue_subscription_test.go
@@ -58,9 +58,17 @@ func TestAPIIssueSubscriptions(t *testing.T) {
session.MakeRequest(t, req, http.StatusCreated)
testSubscription(issue1, false)
+ req = NewRequest(t, "DELETE", urlStr)
+ session.MakeRequest(t, req, http.StatusOK)
+ testSubscription(issue1, false)
+
issue5Repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: issue5.RepoID}).(*models.Repository)
urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/subscriptions/%s?token=%s", issue5Repo.OwnerName, issue5Repo.Name, issue5.Index, owner.Name, token)
req = NewRequest(t, "PUT", urlStr)
session.MakeRequest(t, req, http.StatusCreated)
testSubscription(issue5, true)
+
+ req = NewRequest(t, "PUT", urlStr)
+ session.MakeRequest(t, req, http.StatusOK)
+ testSubscription(issue5, true)
}
diff --git a/routers/api/v1/repo/issue_subscription.go b/routers/api/v1/repo/issue_subscription.go
index 999dda1738..dfccbde64e 100644
--- a/routers/api/v1/repo/issue_subscription.go
+++ b/routers/api/v1/repo/issue_subscription.go
@@ -45,8 +45,10 @@ func AddIssueSubscription(ctx *context.APIContext) {
// type: string
// required: true
// responses:
+ // "200":
+ // description: Already subscribed
// "201":
- // "$ref": "#/responses/empty"
+ // description: Successfully Subscribed
// "304":
// description: User can only subscribe itself if he is no admin
// "404":
@@ -87,8 +89,10 @@ func DelIssueSubscription(ctx *context.APIContext) {
// type: string
// required: true
// responses:
+ // "200":
+ // description: Already unsubscribed
// "201":
- // "$ref": "#/responses/empty"
+ // description: Successfully Unsubscribed
// "304":
// description: User can only subscribe itself if he is no admin
// "404":
@@ -126,6 +130,19 @@ func setIssueSubscription(ctx *context.APIContext, watch bool) {
return
}
+ current, err := models.CheckIssueWatch(user, issue)
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "CheckIssueWatch", err)
+ return
+ }
+
+ // If watch state wont change
+ if current == watch {
+ ctx.Status(http.StatusOK)
+ return
+ }
+
+ // Update watch state
if err := models.CreateOrUpdateIssueWatch(user.ID, issue.ID, watch); err != nil {
ctx.Error(http.StatusInternalServerError, "CreateOrUpdateIssueWatch", err)
return
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index edcc5fd37a..b6a9085be5 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -5315,8 +5315,11 @@
}
],
"responses": {
+ "200": {
+ "description": "Already subscribed"
+ },
"201": {
- "$ref": "#/responses/empty"
+ "description": "Successfully Subscribed"
},
"304": {
"description": "User can only subscribe itself if he is no admin"
@@ -5370,8 +5373,11 @@
}
],
"responses": {
+ "200": {
+ "description": "Already unsubscribed"
+ },
"201": {
- "$ref": "#/responses/empty"
+ "description": "Successfully Unsubscribed"
},
"304": {
"description": "User can only subscribe itself if he is no admin"