Remove draft comment from local storage upon discard Previously, when a user discarded a draft comment, the draft was still stored in local storage. If they tried to reply to a comment on the same line, the previous message appeared when it shouldn't have. This change removes drafts from local storage when they are discarded. Bug: Issue 4361 Change-Id: Id234676972a21a879e68e754968abf7008098cf6
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js index 8905854..72138ff 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
@@ -125,12 +125,7 @@ this.comment.message = this._messageText; this.disabled = true; - this.$.storage.eraseDraftComment({ - changeNum: this.changeNum, - patchNum: this.patchNum, - path: this.comment.path, - line: this.comment.line, - }); + this._eraseDraftComment(); this._xhrPromise = this._saveDraft(this.comment).then(function(response) { this.disabled = false; @@ -155,6 +150,15 @@ }.bind(this)); }, + _eraseDraftComment: function() { + this.$.storage.eraseDraftComment({ + changeNum: this.changeNum, + patchNum: this.patchNum, + path: this.comment.path, + line: this.comment.line, + }); + }, + _commentChanged: function(comment) { this.editing = !!comment.__editing; if (this.editing) { // It's a new draft/reply, notify. @@ -338,6 +342,8 @@ } this.editing = false; this.disabled = true; + this._eraseDraftComment(); + if (!this.comment.id) { this.disabled = false; this._fireDiscard();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html index 96caebf..f562d3a 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html +++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
@@ -182,6 +182,7 @@ suite('gr-diff-comment draft tests', function() { var element; + var sandbox; setup(function() { stub('gr-rest-api-interface', { @@ -219,6 +220,11 @@ path: '/path/to/file', line: 5, }; + sandbox = sinon.sandbox.create(); + }); + + teardown(function() { + sandbox.restore(); }); test('button visibility states', function() { @@ -332,6 +338,8 @@ assert.isTrue(element.editing); element._messageText = ''; + var eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment'); + // Save should be disabled on an empty message. var disabled = element.$$('.save').hasAttribute('disabled'); assert.isTrue(disabled, 'save button should be disabled.'); @@ -345,18 +353,30 @@ var numDiscardEvents = 0; element.addEventListener('comment-discard', function(e) { numDiscardEvents++; - if (numDiscardEvents == 3) { + assert.isFalse(eraseMessageDraftSpy.called); + if (numDiscardEvents === 2) { assert.isFalse(updateStub.called); done(); } }); MockInteractions.tap(element.$$('.cancel')); - MockInteractions.tap(element.$$('.discard')); element.flushDebouncer('fire-update'); element._messageText = ''; MockInteractions.pressAndReleaseKeyOn(element.$.editTextarea, 27); // esc }); + test('draft discard removes message from storage', function(done) { + element._messageText = ''; + var eraseMessageDraftSpy = sandbox.spy(element, '_eraseDraftComment'); + + var numDiscardEvents = 0; + element.addEventListener('comment-discard', function(e) { + assert.isTrue(eraseMessageDraftSpy.called); + done(); + }); + MockInteractions.tap(element.$$('.discard')); + }); + test('ctrl+s saves comment', function(done) { var stub = sinon.stub(element, 'save', function() { assert.isTrue(stub.called);