mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
POST routes to PUT routes (#48828)
This commit is contained in:
parent
bb66c03f9a
commit
809aa38103
@ -53,7 +53,7 @@ func (srv *ProvisioningSrv) RouteGetPolicyTree(c *models.ReqContext) response.Re
|
||||
return response.JSON(http.StatusOK, policies)
|
||||
}
|
||||
|
||||
func (srv *ProvisioningSrv) RoutePostPolicyTree(c *models.ReqContext, tree apimodels.Route) response.Response {
|
||||
func (srv *ProvisioningSrv) RoutePutPolicyTree(c *models.ReqContext, tree apimodels.Route) response.Response {
|
||||
err := srv.policies.UpdatePolicyTree(c.Req.Context(), c.OrgId, tree, alerting_models.ProvenanceAPI)
|
||||
if errors.Is(err, store.ErrNoAlertmanagerConfiguration) {
|
||||
return ErrResp(http.StatusNotFound, err, "")
|
||||
|
@ -26,24 +26,24 @@ func TestProvisioningApi(t *testing.T) {
|
||||
require.Equal(t, 200, response.Status())
|
||||
})
|
||||
|
||||
t.Run("successful POST policies returns 202", func(t *testing.T) {
|
||||
t.Run("successful PUT policies returns 202", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut()
|
||||
rc := createTestRequestCtx()
|
||||
tree := apimodels.Route{}
|
||||
|
||||
response := sut.RoutePostPolicyTree(&rc, tree)
|
||||
response := sut.RoutePutPolicyTree(&rc, tree)
|
||||
|
||||
require.Equal(t, 202, response.Status())
|
||||
})
|
||||
|
||||
t.Run("when new policy tree is invalid", func(t *testing.T) {
|
||||
t.Run("POST policies returns 400", func(t *testing.T) {
|
||||
t.Run("PUT policies returns 400", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut()
|
||||
sut.policies = &fakeRejectingNotificationPolicyService{}
|
||||
rc := createTestRequestCtx()
|
||||
tree := apimodels.Route{}
|
||||
|
||||
response := sut.RoutePostPolicyTree(&rc, tree)
|
||||
response := sut.RoutePutPolicyTree(&rc, tree)
|
||||
|
||||
require.Equal(t, 400, response.Status())
|
||||
expBody := `{"error":"invalid object specification: invalid policy tree","message":"invalid object specification: invalid policy tree"}`
|
||||
@ -86,13 +86,13 @@ func TestProvisioningApi(t *testing.T) {
|
||||
require.Contains(t, string(response.Body()), "something went wrong")
|
||||
})
|
||||
|
||||
t.Run("POST policies returns 500", func(t *testing.T) {
|
||||
t.Run("PUT policies returns 500", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut()
|
||||
sut.policies = &fakeFailingNotificationPolicyService{}
|
||||
rc := createTestRequestCtx()
|
||||
tree := apimodels.Route{}
|
||||
|
||||
response := sut.RoutePostPolicyTree(&rc, tree)
|
||||
response := sut.RoutePutPolicyTree(&rc, tree)
|
||||
|
||||
require.Equal(t, 500, response.Status())
|
||||
require.NotEmpty(t, response.Body())
|
||||
|
@ -186,7 +186,7 @@ func (api *API) authorize(method, path string) web.Handler {
|
||||
http.MethodGet + "/api/provisioning/templates/{name}":
|
||||
return middleware.ReqSignedIn
|
||||
|
||||
case http.MethodPost + "/api/provisioning/policies",
|
||||
case http.MethodPut + "/api/provisioning/policies",
|
||||
http.MethodPost + "/api/provisioning/contact-points",
|
||||
http.MethodPut + "/api/provisioning/contact-points",
|
||||
http.MethodDelete + "/api/provisioning/contact-points/{ID}",
|
||||
|
@ -23,8 +23,8 @@ func (f *ForkedProvisioningApi) forkRouteGetPolicyTree(ctx *models.ReqContext) r
|
||||
return f.svc.RouteGetPolicyTree(ctx)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) forkRoutePostPolicyTree(ctx *models.ReqContext, route apimodels.Route) response.Response {
|
||||
return f.svc.RoutePostPolicyTree(ctx, route)
|
||||
func (f *ForkedProvisioningApi) forkRoutePutPolicyTree(ctx *models.ReqContext, route apimodels.Route) response.Response {
|
||||
return f.svc.RoutePutPolicyTree(ctx, route)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) forkRouteGetContactpoints(ctx *models.ReqContext) response.Response {
|
||||
|
@ -27,8 +27,8 @@ type ProvisioningApiForkingService interface {
|
||||
RouteGetTemplate(*models.ReqContext) response.Response
|
||||
RouteGetTemplates(*models.ReqContext) response.Response
|
||||
RoutePostContactpoints(*models.ReqContext) response.Response
|
||||
RoutePostPolicyTree(*models.ReqContext) response.Response
|
||||
RoutePutContactpoints(*models.ReqContext) response.Response
|
||||
RoutePutPolicyTree(*models.ReqContext) response.Response
|
||||
RoutePutTemplate(*models.ReqContext) response.Response
|
||||
}
|
||||
|
||||
@ -64,14 +64,6 @@ func (f *ForkedProvisioningApi) RoutePostContactpoints(ctx *models.ReqContext) r
|
||||
return f.forkRoutePostContactpoints(ctx, conf)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) RoutePostPolicyTree(ctx *models.ReqContext) response.Response {
|
||||
conf := apimodels.Route{}
|
||||
if err := web.Bind(ctx.Req, &conf); err != nil {
|
||||
return response.Error(http.StatusBadRequest, "bad request data", err)
|
||||
}
|
||||
return f.forkRoutePostPolicyTree(ctx, conf)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) RoutePutContactpoints(ctx *models.ReqContext) response.Response {
|
||||
conf := apimodels.EmbeddedContactPoint{}
|
||||
if err := web.Bind(ctx.Req, &conf); err != nil {
|
||||
@ -80,6 +72,14 @@ func (f *ForkedProvisioningApi) RoutePutContactpoints(ctx *models.ReqContext) re
|
||||
return f.forkRoutePutContactpoints(ctx, conf)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) RoutePutPolicyTree(ctx *models.ReqContext) response.Response {
|
||||
conf := apimodels.Route{}
|
||||
if err := web.Bind(ctx.Req, &conf); err != nil {
|
||||
return response.Error(http.StatusBadRequest, "bad request data", err)
|
||||
}
|
||||
return f.forkRoutePutPolicyTree(ctx, conf)
|
||||
}
|
||||
|
||||
func (f *ForkedProvisioningApi) RoutePutTemplate(ctx *models.ReqContext) response.Response {
|
||||
conf := apimodels.MessageTemplateContent{}
|
||||
if err := web.Bind(ctx.Req, &conf); err != nil {
|
||||
@ -160,16 +160,6 @@ func (api *API) RegisterProvisioningApiEndpoints(srv ProvisioningApiForkingServi
|
||||
m,
|
||||
),
|
||||
)
|
||||
group.Post(
|
||||
toMacaronPath("/api/provisioning/policies"),
|
||||
api.authorize(http.MethodPost, "/api/provisioning/policies"),
|
||||
metrics.Instrument(
|
||||
http.MethodPost,
|
||||
"/api/provisioning/policies",
|
||||
srv.RoutePostPolicyTree,
|
||||
m,
|
||||
),
|
||||
)
|
||||
group.Put(
|
||||
toMacaronPath("/api/provisioning/contact-points"),
|
||||
api.authorize(http.MethodPut, "/api/provisioning/contact-points"),
|
||||
@ -180,6 +170,16 @@ func (api *API) RegisterProvisioningApiEndpoints(srv ProvisioningApiForkingServi
|
||||
m,
|
||||
),
|
||||
)
|
||||
group.Put(
|
||||
toMacaronPath("/api/provisioning/policies"),
|
||||
api.authorize(http.MethodPut, "/api/provisioning/policies"),
|
||||
metrics.Instrument(
|
||||
http.MethodPut,
|
||||
"/api/provisioning/policies",
|
||||
srv.RoutePutPolicyTree,
|
||||
m,
|
||||
),
|
||||
)
|
||||
group.Put(
|
||||
toMacaronPath("/api/provisioning/templates/{name}"),
|
||||
api.authorize(http.MethodPut, "/api/provisioning/templates/{name}"),
|
||||
|
@ -8,7 +8,7 @@ package definitions
|
||||
// 200: Route
|
||||
// 400: ValidationError
|
||||
|
||||
// swagger:route POST /api/provisioning/policies provisioning RoutePostPolicyTree
|
||||
// swagger:route PUT /api/provisioning/policies provisioning RoutePutPolicyTree
|
||||
//
|
||||
// Sets the notification policy tree.
|
||||
//
|
||||
@ -19,7 +19,7 @@ package definitions
|
||||
// 202: Accepted
|
||||
// 400: ValidationError
|
||||
|
||||
// swagger:parameters RoutePostPolicyTree
|
||||
// swagger:parameters RoutePutPolicyTree
|
||||
type Policytree struct {
|
||||
// in:body
|
||||
Body Route
|
||||
|
@ -3569,7 +3569,6 @@
|
||||
"x-go-package": "github.com/prometheus/alertmanager/api/v2/models"
|
||||
},
|
||||
"receiver": {
|
||||
"description": "Receiver receiver",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "name",
|
||||
@ -3580,7 +3579,9 @@
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"type": "object"
|
||||
"type": "object",
|
||||
"x-go-name": "Receiver",
|
||||
"x-go-package": "github.com/prometheus/alertmanager/api/v2/models"
|
||||
},
|
||||
"silence": {
|
||||
"description": "Silence silence",
|
||||
@ -4927,11 +4928,11 @@
|
||||
"provisioning"
|
||||
]
|
||||
},
|
||||
"post": {
|
||||
"put": {
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"operationId": "RoutePostPolicyTree",
|
||||
"operationId": "RoutePutPolicyTree",
|
||||
"parameters": [
|
||||
{
|
||||
"in": "body",
|
||||
|
@ -1250,7 +1250,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"put": {
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
@ -1258,7 +1258,7 @@
|
||||
"provisioning"
|
||||
],
|
||||
"summary": "Sets the notification policy tree.",
|
||||
"operationId": "RoutePostPolicyTree",
|
||||
"operationId": "RoutePutPolicyTree",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "Body",
|
||||
@ -5555,7 +5555,6 @@
|
||||
"$ref": "#/definitions/postableSilence"
|
||||
},
|
||||
"receiver": {
|
||||
"description": "Receiver receiver",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
@ -5567,6 +5566,8 @@
|
||||
"x-go-name": "Name"
|
||||
}
|
||||
},
|
||||
"x-go-name": "Receiver",
|
||||
"x-go-package": "github.com/prometheus/alertmanager/api/v2/models",
|
||||
"$ref": "#/definitions/receiver"
|
||||
},
|
||||
"silence": {
|
||||
|
@ -96,8 +96,8 @@ func TestProvisioning(t *testing.T) {
|
||||
require.Equal(t, 200, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("un-authenticated POST should 401", func(t *testing.T) {
|
||||
req := createTestRequest("POST", url, "", body)
|
||||
t.Run("un-authenticated PUT should 401", func(t *testing.T) {
|
||||
req := createTestRequest("PUT", url, "", body)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
require.NoError(t, err)
|
||||
@ -106,8 +106,8 @@ func TestProvisioning(t *testing.T) {
|
||||
require.Equal(t, 401, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("viewer POST should 403", func(t *testing.T) {
|
||||
req := createTestRequest("POST", url, "viewer", body)
|
||||
t.Run("viewer PUT should 403", func(t *testing.T) {
|
||||
req := createTestRequest("PUT", url, "viewer", body)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
require.NoError(t, err)
|
||||
@ -116,8 +116,8 @@ func TestProvisioning(t *testing.T) {
|
||||
require.Equal(t, 403, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("editor POST should succeed", func(t *testing.T) {
|
||||
req := createTestRequest("POST", url, "editor", body)
|
||||
t.Run("editor PUT should succeed", func(t *testing.T) {
|
||||
req := createTestRequest("PUT", url, "editor", body)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
require.NoError(t, err)
|
||||
@ -126,8 +126,8 @@ func TestProvisioning(t *testing.T) {
|
||||
require.Equal(t, 202, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("admin POST should succeed", func(t *testing.T) {
|
||||
req := createTestRequest("POST", url, "admin", body)
|
||||
t.Run("admin PUT should succeed", func(t *testing.T) {
|
||||
req := createTestRequest("PUT", url, "admin", body)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
require.NoError(t, err)
|
||||
|
Loading…
Reference in New Issue
Block a user