diff --git a/apps/sms/js/thread_ui.js b/apps/sms/js/thread_ui.js index c5a73b1dfd10..7e448c600ed7 100755 --- a/apps/sms/js/thread_ui.js +++ b/apps/sms/js/thread_ui.js @@ -2387,8 +2387,13 @@ var ThreadUI = global.ThreadUI = { { confirmHandler: function() { // Update messageDOM state to 'sending' while sim switching - messageDOM.classList.remove('error'); - messageDOM.classList.add('sending'); + // Getting it again because it might be displayed now. + // if we're in the new message panel, messageDOM is not displayed + var messageDOM = document.getElementById('message-' + message.id); + if (messageDOM) { + messageDOM.classList.remove('error'); + messageDOM.classList.add('sending'); + } Settings.switchMmsSimHandler(serviceId).then( this.resendMessage.bind(this, message.id)) diff --git a/apps/sms/test/unit/thread_ui_test.js b/apps/sms/test/unit/thread_ui_test.js index 2fda796a772c..9590f3994fd0 100755 --- a/apps/sms/test/unit/thread_ui_test.js +++ b/apps/sms/test/unit/thread_ui_test.js @@ -2126,7 +2126,7 @@ suite('thread_ui.js >', function() { suite('message status update handlers >', function() { teardown(function() { - document.body.removeChild(this.container); + this.container.remove(); }); setup(function() { this.fakeMessage = { @@ -2168,6 +2168,7 @@ suite('thread_ui.js >', function() { assert.isTrue(this.container.classList.contains('error')); }); }); + suite('messages that were previously in the "error" state >', function() { setup(function() { @@ -2179,28 +2180,65 @@ suite('thread_ui.js >', function() { assert.isTrue(this.container.classList.contains('sending')); }); }); - suite('Show error dialog while sending failed', - function() { + + suite('Show error dialog while sending failed', function() { setup(function() { this.sinon.spy(ThreadUI, 'showMessageError'); this.sinon.stub(Settings, 'switchMmsSimHandler') .returns(Promise.resolve()); }); + test('does not show dialog if error is not NonActiveSimCardError', function() { ThreadUI.onMessageFailed(this.fakeMessage); sinon.assert.notCalled(ThreadUI.showMessageError); }); - test('Show dialog if error is NonActiveSimCardError', + + suite('Show dialog if error is NonActiveSimCardError,', function() { + setup(function() { + ThreadUI.showErrorInFailedEvent = 'NonActiveSimCardError'; + }); + + + test('When the message is displayed', function() { + ThreadUI.onMessageFailed(this.fakeMessage); + + sinon.assert.called(ThreadUI.showMessageError); + assert.equal(ThreadUI.showErrorInFailedEvent, ''); + MockErrorDialog.calls[0][1].confirmHandler(); + assert.isTrue(this.container.classList.contains('sending')); + assert.isFalse(this.container.classList.contains('error')); + sinon.assert.called(Settings.switchMmsSimHandler); + }); + + test('When the message is not displayed', function() { + this.container.remove(); + + ThreadUI.onMessageFailed(this.fakeMessage); + + sinon.assert.called(ThreadUI.showMessageError); + assert.equal(ThreadUI.showErrorInFailedEvent, ''); + MockErrorDialog.calls[0][1].confirmHandler(); + sinon.assert.called(Settings.switchMmsSimHandler); + }); + + test('When the message is displayed while the dialog is displayed', function() { - ThreadUI.showErrorInFailedEvent = 'NonActiveSimCardError'; - ThreadUI.onMessageFailed(this.fakeMessage); - sinon.assert.called(ThreadUI.showMessageError); - assert.equal(ThreadUI.showErrorInFailedEvent, ''); - MockErrorDialog.calls[0][1].confirmHandler(); - assert.isTrue(this.container.classList.contains('sending')); - assert.isFalse(this.container.classList.contains('error')); - sinon.assert.called(Settings.switchMmsSimHandler); + this.container.remove(); + + ThreadUI.onMessageFailed(this.fakeMessage); + + sinon.assert.called(ThreadUI.showMessageError); + assert.equal(ThreadUI.showErrorInFailedEvent, ''); + + this.container.className = 'error'; + document.body.appendChild(this.container); + MockErrorDialog.calls[0][1].confirmHandler(); + + sinon.assert.called(Settings.switchMmsSimHandler); + assert.isTrue(this.container.classList.contains('sending')); + assert.isFalse(this.container.classList.contains('error')); + }); }); }); });