From 1d29a9537b4fda731dd575a11d66eecf7e14eeba Mon Sep 17 00:00:00 2001 From: Felix Gertz Date: Thu, 14 Apr 2016 14:01:26 +0200 Subject: [PATCH 1/4] Enable multiple general errors from server error response --- src/js/components/modals/AppModalComponent.jsx | 11 +++++++++-- src/js/stores/AppFormStore.js | 11 ++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/js/components/modals/AppModalComponent.jsx b/src/js/components/modals/AppModalComponent.jsx index 958159b75..0c8710f7b 100644 --- a/src/js/components/modals/AppModalComponent.jsx +++ b/src/js/components/modals/AppModalComponent.jsx @@ -141,12 +141,19 @@ var AppModalComponent = React.createClass({ if (Util.isObject(error)) { error = Object.keys(error).map(key => { - return `${key}: ${error[key]}`; + var errorMsg = error[key]; + if (Util.isArray(errorMsg)) { + return errorMsg.map(message => { + return `${key}: ${message}`; + }); + } + return `${key}: ${errorMsg}`; }); } if (Util.isArray(error)) { - error = error.map((message, index) => + var flattenedErrors = [].concat.apply([], error); + error = flattenedErrors.map((message, index) =>
  • ); } else { diff --git a/src/js/stores/AppFormStore.js b/src/js/stores/AppFormStore.js index a9d92a6c5..cc7bc9b0c 100644 --- a/src/js/stores/AppFormStore.js +++ b/src/js/stores/AppFormStore.js @@ -395,6 +395,9 @@ function processResponseErrors(responseErrors, response, statusCode) { } else if (statusCode === 422 && response != null && Util.isArray(response.details)) { + + responseErrors.general = []; + response.details.forEach(detail => { var attributePath = "general"; @@ -419,8 +422,14 @@ function processResponseErrors(responseErrors, response, statusCode) { error = response.message; } - responseErrors[fieldId] = + let serverResponseMessage = AppFormErrorMessages.lookupServerResponseMessage(error); + + if (fieldId === "general") { + responseErrors.general.push(serverResponseMessage); + } else { + responseErrors[fieldId] = serverResponseMessage; + } }); } else if (statusCode === 409 && responseHasDeployments) { From d5ea8eda703a0132ae0e49f98c6cfeeb8db878ae Mon Sep 17 00:00:00 2001 From: Felix Gertz Date: Thu, 14 Apr 2016 14:19:12 +0200 Subject: [PATCH 2/4] Add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ad43ff6d..7584a52f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unversioned +### Fixed +- \#3763 - Enable multiple general errors from server response + ## 1.1.1 - 2016-04-13 ### Added - \#3658 - Allow Kill & Wipe for resident tasks From 3a1a1b5961a037f995a8f09c4ca33a34e5f2e5e8 Mon Sep 17 00:00:00 2001 From: Felix Gertz Date: Thu, 14 Apr 2016 14:45:25 +0200 Subject: [PATCH 3/4] Fix tests --- src/test/scenarios/createApplication.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/scenarios/createApplication.test.js b/src/test/scenarios/createApplication.test.js index eb18d48f4..ecf2a2de8 100644 --- a/src/test/scenarios/createApplication.test.js +++ b/src/test/scenarios/createApplication.test.js @@ -204,7 +204,7 @@ describe("Create Application", function () { AppsStore.once(AppsEvents.CREATE_APP_ERROR, function () { expectAsync(function () { - expect(AppFormStore.responseErrors.general) + expect(AppFormStore.responseErrors.general[0]) .to.equal("Groups and Applications may not have the same " + "identifier: /sleep"); }, done); @@ -231,7 +231,7 @@ describe("Create Application", function () { AppsStore.once(AppsEvents.CREATE_APP_ERROR, function () { expectAsync(function () { - expect(AppFormStore.responseErrors.general) + expect(AppFormStore.responseErrors.general[0]) .to.equal("Object is not valid"); }, done); }); @@ -255,7 +255,7 @@ describe("Create Application", function () { AppsStore.once(AppsEvents.CREATE_APP_ERROR, function () { expectAsync(function () { - expect(AppFormStore.responseErrors.general) + expect(AppFormStore.responseErrors.general[0]) .to.equal("May not be changed."); }, done); }); From 646ad2d79a8cc844d12bf1a6a79481b997f5a4a3 Mon Sep 17 00:00:00 2001 From: Felix Gertz Date: Thu, 14 Apr 2016 15:03:49 +0200 Subject: [PATCH 4/4] Add test --- src/test/scenarios/createApplication.test.js | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/test/scenarios/createApplication.test.js b/src/test/scenarios/createApplication.test.js index ecf2a2de8..b703a46b0 100644 --- a/src/test/scenarios/createApplication.test.js +++ b/src/test/scenarios/createApplication.test.js @@ -226,6 +226,38 @@ describe("Create Application", function () { }); }); + it("processes a 422 multiple error response correctly", + function (done) { + + nock(config.apiURL) + .post("/v2/apps") + .reply(422, { + "message": "Object is not valid", + "details": [{ + "path": "/", + "errors": ["Groups and Applications may not have the same " + + "identifier: /sleep"] + }, { + "path": "/", + "errors": ["This is a second unmapped error"] + }] + }); + + AppsStore.once(AppsEvents.CREATE_APP_ERROR, function () { + expectAsync(function () { + expect(AppFormStore.responseErrors.general) + .to.deep.equal(["Groups and Applications may not have the same " + + "identifier: /sleep", + "This is a second unmapped error" + ]); + }, done); + }); + + AppsActions.createApp({ + id: "sleep/my-app" + }); + }); + it("processes a 422 error response with no error details correctly", function (done) {