// Publish a new API.
func (ps *PublishService) PostApfIdServiceApis(ctx echo.Context, apfId string) error {
var newServiceAPIDescription publishapi.ServiceAPIDescription
- errorMsg := "Unable to register the service due to: %s "
+ errorMsg := "Unable to publish the service due to %s "
err := ctx.Bind(&newServiceAPIDescription)
if err != nil {
return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errorMsg, "invalid format for service "+apfId))
}
+ if ps.isServicePublished(newServiceAPIDescription) {
+ return sendCoreError(ctx, http.StatusForbidden, fmt.Sprintf(errorMsg, "service already published"))
+ }
+
if err := newServiceAPIDescription.Validate(); err != nil {
return sendCoreError(ctx, http.StatusBadRequest, fmt.Sprintf(errorMsg, err))
}
return nil
}
+func (ps *PublishService) isServicePublished(newService publishapi.ServiceAPIDescription) bool {
+ for _, services := range ps.publishedServices {
+ for _, service := range services {
+ if newService.ApiName == service.ApiName {
+ return true
+ }
+ }
+ }
+ return false
+}
+
func (ps *PublishService) installHelmChart(newServiceAPIDescription publishapi.ServiceAPIDescription, ctx echo.Context) (bool, error) {
info := strings.Split(*newServiceAPIDescription.Description, ",")
if len(info) == 5 {
assert.NoError(t, err, "error unmarshaling response")
assert.Equal(t, *resultService.ApiId, newApiId)
+ // Publish the same service again should result in Forbidden
+ result = testutil.NewRequest().Post("/"+apfId+"/service-apis").WithJsonBody(newServiceDescription).Go(t, requestHandler)
+
+ assert.Equal(t, http.StatusForbidden, result.Code())
+ var resultError common29122.ProblemDetails
+ err = result.UnmarshalBodyToObject(&resultError)
+ assert.NoError(t, err, "error unmarshaling response")
+ assert.Contains(t, *resultError.Cause, "already published")
+ assert.Equal(t, http.StatusForbidden, *resultError.Status)
+
// Delete the service
helmManagerMock.On("UninstallHelmChart", mock.Anything, mock.Anything).Return(nil)
assert.NoError(t, err, "error unmarshaling response")
assert.Contains(t, *resultError.Cause, aefId)
assert.Contains(t, *resultError.Cause, "not registered")
- notFound := http.StatusNotFound
- assert.Equal(t, ¬Found, resultError.Status)
+ assert.Equal(t, http.StatusNotFound, *resultError.Status)
}
func TestGetServices(t *testing.T) {