diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js index 2aafdb1720..522197a873 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js @@ -45,11 +45,13 @@ define( function modes(value) { // Can be used as a setter... if (arguments.length > 0 && Array.isArray(value)) { - // Update the relationships - mutator.mutate(function (model) { - model.relationships = model.relationships || {}; - model.relationships[ACTIVITY_RELATIONSHIP] = value; - }).then(persister.persist); + if ((model.relationships || {})[ACTIVITY_RELATIONSHIP] !== value) { + // Update the relationships + mutator.mutate(function (model) { + model.relationships = model.relationships || {}; + model.relationships[ACTIVITY_RELATIONSHIP] = value; + }).then(persister.persist); + } } // ...otherwise, use as a getter return (model.relationships || {})[ACTIVITY_RELATIONSHIP] || []; diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js index 643c32b55e..c76920f2a0 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js @@ -32,12 +32,14 @@ define( mockCapabilities, testModel, mockPromise, + testModes, decorator; beforeEach(function () { mockSwimlane = {}; mockCapabilities = {}; testModel = {}; + testModes = ['a', 'b', 'c']; mockSelection = jasmine.createSpyObj('selection', ['select', 'get']); @@ -135,6 +137,22 @@ define( expect(mockCapabilities.persistence.persist).toHaveBeenCalled(); }); + it("does not mutate modes when unchanged", function () { + testModel.relationships = { modes: testModes }; + decorator.modes(testModes); + expect(mockCapabilities.mutation.mutate).not.toHaveBeenCalled(); + expect(testModel.relationships.modes).toEqual(testModes); + }); + + it("does mutate modes when changed", function () { + var testModes2 = ['d', 'e', 'f']; + testModel.relationships = { modes: testModes }; + decorator.modes(testModes2); + expect(mockCapabilities.mutation.mutate).toHaveBeenCalled(); + mockCapabilities.mutation.mutate.mostRecentCall.args[0](testModel); + expect(testModel.relationships.modes).toBe(testModes2); + }); + it("does not provide a 'remove' method with no parent", function () { expect(decorator.remove).not.toEqual(jasmine.any(Function)); });