From 82e78d3ce84a3fee25139318ebd806e8b1ccc2e9 Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Fri, 18 Nov 2016 23:27:29 +0100 Subject: [PATCH] Use error message from the server when like failed --- app/assets/javascripts/app/models/post/interactions.js | 4 ++-- app/controllers/likes_controller.rb | 2 +- spec/javascripts/app/models/post/interacations_spec.js | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/app/models/post/interactions.js b/app/assets/javascripts/app/models/post/interactions.js index 557f6ae12..6fba7db91 100644 --- a/app/assets/javascripts/app/models/post/interactions.js +++ b/app/assets/javascripts/app/models/post/interactions.js @@ -72,8 +72,8 @@ app.models.Post.Interactions = Backbone.Model.extend({ self.set({"likes_count" : self.get("likes_count") + 1}); self.likes.trigger("change"); }, - error: function() { - app.flashMessages.error(Diaspora.I18n.t("failed_to_like")); + error: function(model, response) { + app.flashMessages.handleAjaxError(response); } }); diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index adf92827e..afc0be113 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -26,7 +26,7 @@ class LikesController < ApplicationController format.json { render :json => @like.as_api_response(:backbone), :status => 201 } end else - render :nothing => true, :status => 422 + render text: I18n.t("javascripts.failed_to_like"), status: 422 end end diff --git a/spec/javascripts/app/models/post/interacations_spec.js b/spec/javascripts/app/models/post/interacations_spec.js index d537600ce..a88224131 100644 --- a/spec/javascripts/app/models/post/interacations_spec.js +++ b/spec/javascripts/app/models/post/interacations_spec.js @@ -49,6 +49,16 @@ describe("app.models.Post.Interactions", function(){ jasmine.Ajax.requests.mostRecent().respondWith(ajaxSuccess); expect(this.interactions.likes.trigger).toHaveBeenCalledWith("change"); }); + + it("displays a flash message on errors", function() { + spyOn(app.flashMessages, "handleAjaxError").and.callThrough(); + this.interactions.like(); + 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("unlike", function(){