diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 28532a1a1d..d18404dd34 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -101,10 +101,15 @@ define( */ EditorCapability.prototype.finish = function () { var domainObject = this.domainObject; - return this.transactionService.cancel().then(function () { - domainObject.getCapability("status").set("editing", false); - return domainObject; - }); + + if (this.transactionService.isActive()) { + return this.transactionService.cancel().then(function () { + domainObject.getCapability("status").set("editing", false); + return domainObject; + }); + } else { + return Promise.resolve(domainObject); + } }; /** diff --git a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js index 1c88ed9af0..33878ab6a3 100644 --- a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js @@ -62,6 +62,7 @@ define( ); mockTransactionService.commit.andReturn(fastPromise()); mockTransactionService.cancel.andReturn(fastPromise()); + mockTransactionService.isActive = jasmine.createSpy('isActive'); mockStatusCapability = jasmine.createSpyObj( "statusCapability", @@ -141,6 +142,7 @@ define( describe("finish", function () { beforeEach(function () { + mockTransactionService.isActive.andReturn(true); capability.edit(); capability.finish(); }); @@ -152,6 +154,23 @@ define( }); }); + describe("finish", function () { + beforeEach(function () { + mockTransactionService.isActive.andReturn(false); + capability.edit(); + }); + + it("does not cancel transaction when transaction is not active", function () { + capability.finish(); + expect(mockTransactionService.cancel).not.toHaveBeenCalled(); + }); + + it("returns a promise", function () { + expect(capability.finish() instanceof Promise).toBe(true); + }); + + }); + describe("dirty", function () { var model = {};