From 546f90965874aff92dc259fa4f27caa06ea9d889 Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Sat, 10 Sep 2016 21:30:39 +0200 Subject: [PATCH] Fix 500 in html requests for post interactions closes #7085 --- Changelog.md | 1 + app/controllers/posts_controller.rb | 9 +++++-- spec/controllers/posts_controller_spec.rb | 32 +++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index e3ecbcf47..4723bd45f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -15,6 +15,7 @@ * More buttons in mobile streams are fixed [#7036](https://github.com/diaspora/diaspora/pull/7036) * Fixed missing sidebar background in the contacts tab [#7064](https://github.com/diaspora/diaspora/pull/7064) * Fix tags URLs in hovercards [#7075](https://github.com/diaspora/diaspora/pull/7075) +* Fix 500 in html requests for post interactions [#7085](https://github.com/diaspora/diaspora/pull/7085) ## Features * Deleted comments will be removed when loading more comments [#7045](https://github.com/diaspora/diaspora/pull/7045) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index be2c2dcc9..e88af7a77 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -41,8 +41,13 @@ class PostsController < ApplicationController end def interactions - post = post_service.find!(params[:id]) - respond_with PostInteractionPresenter.new(post, current_user) + respond_to do |format| + format.json { + post = post_service.find!(params[:id]) + render json: PostInteractionPresenter.new(post, current_user) + } + format.any { render nothing: true, status: 406 } + end end def destroy diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb index 7c3bb4384..82464ad3a 100644 --- a/spec/controllers/posts_controller_spec.rb +++ b/spec/controllers/posts_controller_spec.rb @@ -136,6 +136,38 @@ describe PostsController, type: :controller do end end + describe "#interactions" do + context "user not signed in" do + it "returns a 401 for private posts and format json" do + get :interactions, id: post.id, format: :json + expect(response.status).to eq(401) + expect(JSON.parse(response.body)["error"]).to eq(I18n.t("devise.failure.unauthenticated")) + end + + it "returns a 406 for private posts and format html" do + get :interactions, id: post.id + expect(response.status).to eq(406) + end + end + + context "user signed in" do + before do + sign_in alice + end + + it "shows interactions of a post as json" do + get :interactions, id: post.id, format: :json + expect(response.body).to eq(PostInteractionPresenter.new(post, alice).to_json) + end + + it "returns a 406 for format html" do + sign_in alice + get :interactions, id: post.id + expect(response.status).to eq(406) + end + end + end + describe "#destroy" do context "own post" do before do