From f9996249671d941f34b7b21121ccb0911f3866de Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Sat, 19 Nov 2016 03:39:27 +0100 Subject: [PATCH] Use error message from the server when comment failed --- app/assets/javascripts/app/models/post/interactions.js | 4 ++-- app/controllers/comments_controller.rb | 10 ++++++++-- spec/controllers/comments_controller_spec.rb | 1 + spec/javascripts/app/models/post/interacations_spec.js | 10 ++++++++++ spec/javascripts/app/views/comment_stream_view_spec.js | 3 --- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/app/models/post/interactions.js b/app/assets/javascripts/app/models/post/interactions.js index 6fba7db91..3615387e2 100644 --- a/app/assets/javascripts/app/models/post/interactions.js +++ b/app/assets/javascripts/app/models/post/interactions.js @@ -95,8 +95,8 @@ app.models.Post.Interactions = Backbone.Model.extend({ var self = this; options = options || {}; - this.comments.make(text).fail(function () { - app.flashMessages.error(Diaspora.I18n.t("failed_to_comment")); + this.comments.make(text).fail(function(response) { + app.flashMessages.handleAjaxError(response); if (options.error) { options.error(); } }).done(function() { self.post.set({participation: true}); diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 9abc7503b..848e842db 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -12,11 +12,17 @@ class CommentsController < ApplicationController end def create - comment = comment_service.create(params[:post_id], params[:text]) + begin + comment = comment_service.create(params[:post_id], params[:text]) + rescue ActiveRecord::RecordNotFound + render text: I18n.t("javascripts.failed_to_comment"), status: 404 + return + end + if comment respond_create_success(comment) else - render nothing: true, status: 404 + render text: I18n.t("javascripts.failed_to_comment"), status: 422 end end diff --git a/spec/controllers/comments_controller_spec.rb b/spec/controllers/comments_controller_spec.rb index 39492d191..e951b87a6 100644 --- a/spec/controllers/comments_controller_spec.rb +++ b/spec/controllers/comments_controller_spec.rb @@ -67,6 +67,7 @@ describe CommentsController, :type => :controller do expect(alice).not_to receive(:comment) post :create, comment_hash expect(response.code).to eq("404") + expect(response.body).to eq(I18n.t("javascripts.failed_to_comment")) end end diff --git a/spec/javascripts/app/models/post/interacations_spec.js b/spec/javascripts/app/models/post/interacations_spec.js index a88224131..019ca307a 100644 --- a/spec/javascripts/app/models/post/interacations_spec.js +++ b/spec/javascripts/app/models/post/interacations_spec.js @@ -286,6 +286,16 @@ describe("app.models.Post.Interactions", function(){ jasmine.Ajax.requests.mostRecent().respondWith({status: 400}); expect(error).toHaveBeenCalled(); }); + + it("displays a flash message", function() { + spyOn(app.flashMessages, "handleAjaxError").and.callThrough(); + this.interactions.comment("text"); + 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"); + }); }); }); }); diff --git a/spec/javascripts/app/views/comment_stream_view_spec.js b/spec/javascripts/app/views/comment_stream_view_spec.js index bec0ce5a2..ecac07333 100644 --- a/spec/javascripts/app/views/comment_stream_view_spec.js +++ b/spec/javascripts/app/views/comment_stream_view_spec.js @@ -116,9 +116,6 @@ describe("app.views.CommentStream", function(){ it("doesn't add the comment to the view", function() { this.request.respondWith({status: 500}); expect(this.view.$(".comment-content p").text()).not.toEqual("a new comment"); - expect(this.view.$(".flash-message")).toBeErrorFlashMessage( - "Failed to comment. Maybe the author is ignoring you?" - ); }); it("doesn't reset the comment box value", function() {