diff --git a/integrations/api_issue_reaction_test.go b/integrations/api_issue_reaction_test.go index 1906b8d09..ab3de7c11 100644 --- a/integrations/api_issue_reaction_test.go +++ b/integrations/api_issue_reaction_test.go @@ -11,11 +11,27 @@ import ( "time" "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "github.com/stretchr/testify/assert" ) +func TestAPIAllowedReactions(t *testing.T) { + defer prepareTestEnv(t)() + + type allowed []string + + a := new(allowed) + + req := NewRequest(t, "GET", "/api/v1/settings/allowed_reactions") + resp := MakeRequest(t, req, http.StatusOK) + + DecodeJSON(t, resp, &a) + assert.Len(t, *a, len(setting.UI.Reactions)) + assert.ElementsMatch(t, setting.UI.Reactions, *a) +} + func TestAPIIssuesReactions(t *testing.T) { defer prepareTestEnv(t)() diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 2eb39f607..0f8a0326e 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -512,6 +512,9 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/signing-key.gpg", misc.SigningKey) m.Post("/markdown", bind(api.MarkdownOption{}), misc.Markdown) m.Post("/markdown/raw", misc.MarkdownRaw) + m.Group("/settings", func() { + m.Get("/allowed_reactions", misc.SettingGetsAllowedReactions) + }) // Notifications m.Group("/notifications", func() { diff --git a/routers/api/v1/misc/settings.go b/routers/api/v1/misc/settings.go new file mode 100644 index 000000000..11c7eef72 --- /dev/null +++ b/routers/api/v1/misc/settings.go @@ -0,0 +1,23 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package misc + +import ( + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/setting" +) + +// SettingGetsAllowedReactions return allowed reactions +func SettingGetsAllowedReactions(ctx *context.APIContext) { + // swagger:operation GET /settings/allowed_reactions miscellaneous getAllowedReactions + // --- + // summary: Returns string array of allowed reactions + // produces: + // - application/json + // responses: + // "200": + // "$ref": "#/responses/StringSlice" + ctx.JSON(200, setting.UI.Reactions) +} diff --git a/routers/api/v1/swagger/misc.go b/routers/api/v1/swagger/misc.go index 9fd0ab5b0..1d3c257ef 100644 --- a/routers/api/v1/swagger/misc.go +++ b/routers/api/v1/swagger/misc.go @@ -14,3 +14,10 @@ type swaggerResponseServerVersion struct { // in:body Body api.ServerVersion `json:"body"` } + +// StringSlice +// swagger:response StringSlice +type swaggerResponseStringSlice struct { + // in:body + Body []string `json:"body"` +} diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 1f159d64a..687a6bc5e 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -8343,6 +8343,23 @@ } } }, + "/settings/allowed_reactions": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "miscellaneous" + ], + "summary": "Returns string array of allowed reactions", + "operationId": "getAllowedReactions", + "responses": { + "200": { + "$ref": "#/responses/StringSlice" + } + } + } + }, "/signing-key.gpg": { "get": { "produces": [ @@ -15042,6 +15059,15 @@ } } }, + "StringSlice": { + "description": "StringSlice", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, "Tag": { "description": "Tag", "schema": {