From a18d3007a738f79589d26d61ca23def6de1df2f0 Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Tue, 6 Jul 2021 12:11:29 +0300 Subject: [PATCH] Folders: Return `409 Conflict` status when folder already exists (#36429) * Return 409 Conflict when trying to post folder that already exists * Fix tests * Update documentation for new error message in folders api --- docs/sources/http_api/folder.md | 1 + pkg/api/folder.go | 7 +++++-- pkg/api/folder_test.go | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/sources/http_api/folder.md b/docs/sources/http_api/folder.md index dc350cf1058..640b5a12ebf 100644 --- a/docs/sources/http_api/folder.md +++ b/docs/sources/http_api/folder.md @@ -154,6 +154,7 @@ Status Codes: - **400** – Errors (invalid json, missing or invalid fields, etc) - **401** – Unauthorized - **403** – Access Denied +- **409** - Folder already exists ## Update folder diff --git a/pkg/api/folder.go b/pkg/api/folder.go index fda9e4fa05e..fabbd7c66bd 100644 --- a/pkg/api/folder.go +++ b/pkg/api/folder.go @@ -147,8 +147,6 @@ func ToFolderErrorResponse(err error) response.Response { } if errors.Is(err, models.ErrFolderTitleEmpty) || - errors.Is(err, models.ErrFolderSameNameExists) || - errors.Is(err, models.ErrFolderWithSameUIDExists) || errors.Is(err, models.ErrDashboardTypeMismatch) || errors.Is(err, models.ErrDashboardInvalidUid) || errors.Is(err, models.ErrDashboardUidTooLong) { @@ -163,6 +161,11 @@ func ToFolderErrorResponse(err error) response.Response { return response.JSON(404, util.DynMap{"status": "not-found", "message": models.ErrFolderNotFound.Error()}) } + if errors.Is(err, models.ErrFolderSameNameExists) || + errors.Is(err, models.ErrFolderWithSameUIDExists) { + return response.Error(409, err.Error(), nil) + } + if errors.Is(err, models.ErrFolderVersionMismatch) { return response.JSON(412, util.DynMap{"status": "version-mismatch", "message": models.ErrFolderVersionMismatch.Error()}) } diff --git a/pkg/api/folder_test.go b/pkg/api/folder_test.go index c83fd8760e5..080ef9b4e72 100644 --- a/pkg/api/folder_test.go +++ b/pkg/api/folder_test.go @@ -46,9 +46,9 @@ func TestFoldersAPIEndpoint(t *testing.T) { Error error ExpectedStatusCode int }{ - {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 409}, {Error: models.ErrFolderTitleEmpty, ExpectedStatusCode: 400}, - {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 409}, {Error: models.ErrDashboardInvalidUid, ExpectedStatusCode: 400}, {Error: models.ErrDashboardUidTooLong, ExpectedStatusCode: 400}, {Error: models.ErrFolderAccessDenied, ExpectedStatusCode: 403}, @@ -102,9 +102,9 @@ func TestFoldersAPIEndpoint(t *testing.T) { Error error ExpectedStatusCode int }{ - {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 409}, {Error: models.ErrFolderTitleEmpty, ExpectedStatusCode: 400}, - {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 409}, {Error: models.ErrDashboardInvalidUid, ExpectedStatusCode: 400}, {Error: models.ErrDashboardUidTooLong, ExpectedStatusCode: 400}, {Error: models.ErrFolderAccessDenied, ExpectedStatusCode: 403},