From 6c5c865b15ec229e9e4d2324686a7fbe0f2849d7 Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Fri, 18 Nov 2016 23:01:57 +0100 Subject: [PATCH] Use error message from the server when reshare failed --- .../javascripts/app/models/post/interactions.js | 4 ++-- app/assets/javascripts/mobile/mobile_post_actions.js | 8 ++++++-- app/controllers/reshares_controller.rb | 2 +- config/locales/javascript/javascript.en.yml | 1 - spec/controllers/reshares_controller_spec.rb | 2 +- .../app/models/post/interacations_spec.js | 12 ++++++++++++ spec/javascripts/mobile/mobile_post_actions_spec.js | 12 +++++++++--- 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/app/models/post/interactions.js b/app/assets/javascripts/app/models/post/interactions.js index 12d0a82d6..557f6ae12 100644 --- a/app/assets/javascripts/app/models/post/interactions.js +++ b/app/assets/javascripts/app/models/post/interactions.js @@ -123,8 +123,8 @@ app.models.Post.Interactions = Backbone.Model.extend({ interactions.set({"reshares_count": interactions.get("reshares_count") + 1}); interactions.reshares.trigger("change"); }) - .fail(function(){ - app.flashMessages.error(Diaspora.I18n.t("reshares.duplicate")); + .fail(function(response) { + app.flashMessages.handleAjaxError(response); }); app.instrument("track", "Reshare"); diff --git a/app/assets/javascripts/mobile/mobile_post_actions.js b/app/assets/javascripts/mobile/mobile_post_actions.js index 6f7c18ee6..56df0e533 100644 --- a/app/assets/javascripts/mobile/mobile_post_actions.js +++ b/app/assets/javascripts/mobile/mobile_post_actions.js @@ -98,8 +98,12 @@ success: function() { Diaspora.Mobile.PostActions.toggleActive(link); }, - error: function() { - alert(Diaspora.I18n.t("failed_to_reshare")); + error: function(response) { + if (response.status === 0) { + alert(Diaspora.I18n.t("errors.connection")); + } else { + alert(response.responseText); + } }, complete: function() { Diaspora.Mobile.PostActions.hideLoader(link); diff --git a/app/controllers/reshares_controller.rb b/app/controllers/reshares_controller.rb index 385e6acfc..4c9f70ca2 100644 --- a/app/controllers/reshares_controller.rb +++ b/app/controllers/reshares_controller.rb @@ -14,7 +14,7 @@ class ResharesController < ApplicationController current_user.dispatch_post(@reshare) render :json => ExtremePostPresenter.new(@reshare, current_user), :status => 201 else - render :nothing => true, :status => 422 + render text: I18n.t("javascripts.failed_to_reshare"), status: 422 end end diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml index e94e0eb9a..94b9b49e0 100644 --- a/config/locales/javascript/javascript.en.yml +++ b/config/locales/javascript/javascript.en.yml @@ -199,7 +199,6 @@ en: hide: "Hide comments" no_comments: "There are no comments yet." reshares: - duplicate: "That good, eh? You’ve already reshared that post!" successful: "The post was successfully reshared!" post: "Reshare <%= name %>’s post?" aspect_navigation: diff --git a/spec/controllers/reshares_controller_spec.rb b/spec/controllers/reshares_controller_spec.rb index 571f5651b..92d9072a8 100644 --- a/spec/controllers/reshares_controller_spec.rb +++ b/spec/controllers/reshares_controller_spec.rb @@ -46,7 +46,7 @@ describe ResharesController, :type => :controller do it 'doesn\'t allow the user to reshare the post again' do post_request! expect(response.code).to eq('422') - expect(response.body.strip).to be_empty + expect(response.body).to eq(I18n.t("javascripts.failed_to_reshare")) end end diff --git a/spec/javascripts/app/models/post/interacations_spec.js b/spec/javascripts/app/models/post/interacations_spec.js index 835504576..d537600ce 100644 --- a/spec/javascripts/app/models/post/interacations_spec.js +++ b/spec/javascripts/app/models/post/interacations_spec.js @@ -6,6 +6,8 @@ describe("app.models.Post.Interactions", function(){ this.interactions = this.post.interactions; this.author = factory.author({guid: "loggedInAsARockstar"}); loginAs({guid: "loggedInAsARockstar"}); + spec.content().append($("
")); + app.flashMessages = new app.views.FlashMessages({el: spec.content().find("#flash-container")}); this.userLike = new app.models.Like({author : this.author}); }); @@ -110,6 +112,16 @@ describe("app.models.Post.Interactions", function(){ jasmine.Ajax.requests.mostRecent().respondWith(ajaxSuccess); expect(this.post.get("participation")).toBeTruthy(); }); + + it("displays a flash message on errors", function() { + spyOn(app.flashMessages, "handleAjaxError").and.callThrough(); + this.interactions.reshare(); + jasmine.Ajax.requests.mostRecent().respondWith({status: 400, responseText: "error message"}); + + expect(app.flashMessages.handleAjaxError).toHaveBeenCalled(); + expect(app.flashMessages.handleAjaxError.calls.argsFor(0)[0].responseText).toBe("error message"); + expect(spec.content().find(".flash-message")).toBeErrorFlashMessage("error message"); + }); }); describe("userLike", function(){ diff --git a/spec/javascripts/mobile/mobile_post_actions_spec.js b/spec/javascripts/mobile/mobile_post_actions_spec.js index 5cdca9000..80d410ea3 100644 --- a/spec/javascripts/mobile/mobile_post_actions_spec.js +++ b/spec/javascripts/mobile/mobile_post_actions_spec.js @@ -223,10 +223,16 @@ describe("Diaspora.Mobile.PostActions", function(){ expect(Diaspora.Mobile.PostActions.toggleActive).toHaveBeenCalledWith(this.reshareLink); }); - it("pops an alert on error", function(){ + it("pops an alert on server errors", function() { this.reshareLink.click(); - jasmine.Ajax.requests.mostRecent().respondWith({status: 400}); - expect(window.alert).toHaveBeenCalledWith(Diaspora.I18n.t("failed_to_reshare")); + jasmine.Ajax.requests.mostRecent().respondWith({status: 400, responseText: "reshare failed"}); + expect(window.alert).toHaveBeenCalledWith("reshare failed"); + }); + + it("pops an alert on network errors", function() { + this.reshareLink.click(); + jasmine.Ajax.requests.mostRecent().abort(); + expect(window.alert).toHaveBeenCalledWith(Diaspora.I18n.t("errors.connection")); }); }); });