From 5b9a4d3581fb1b632d062707bc9828aae16d42e6 Mon Sep 17 00:00:00 2001 From: Wojciech Zawistowski Date: Tue, 18 Feb 2014 17:19:38 +0100 Subject: [PATCH] Refactors PostsController and adds unit tests. --- app/controllers/posts_controller.rb | 8 ++++++-- spec/controllers/posts_controller_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 69172b1c514..4d473c85530 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -64,7 +64,7 @@ class PostsController < ApplicationController post = post.first post.image_sizes = params[:image_sizes] if params[:image_sizes].present? - if !guardian.can_edit?(post) && post.user_id == current_user.id && post.edit_time_limit_expired? + if too_late_to(:edit, post) render json: {errors: [I18n.t('too_late_to_edit')]}, status: 422 return end @@ -134,7 +134,7 @@ class PostsController < ApplicationController def destroy post = find_post_from_params - if !guardian.can_delete_post?(post) && post.user_id == current_user.id && post.edit_time_limit_expired? + if too_late_to(:delete_post, post) render json: {errors: [I18n.t('too_late_to_edit')]}, status: 422 return end @@ -269,4 +269,8 @@ class PostsController < ApplicationController end end + def too_late_to(action, post) + !guardian.send("can_#{action}?", post) && post.user_id == current_user.id && post.edit_time_limit_expired? + end + end diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb index 6a423f64383..ff3665bb068 100644 --- a/spec/controllers/posts_controller_spec.rb +++ b/spec/controllers/posts_controller_spec.rb @@ -79,6 +79,16 @@ describe PostsController do let(:user) { log_in(:moderator) } let(:post) { Fabricate(:post, user: user, post_number: 2) } + it 'does not allow to destroy when edit time limit expired' do + Guardian.any_instance.stubs(:can_delete_post?).with(post).returns(false) + Post.any_instance.stubs(:edit_time_limit_expired?).returns(true) + + xhr :delete, :destroy, id: post.id + + response.status.should == 422 + JSON.parse(response.body)['errors'].should include(I18n.t('too_late_to_edit')) + end + it "raises an error when the user doesn't have permission to see the post" do Guardian.any_instance.expects(:can_delete?).with(post).returns(false) xhr :delete, :destroy, id: post.id @@ -195,6 +205,16 @@ describe PostsController do } end + it 'does not allow to update when edit time limit expired' do + Guardian.any_instance.stubs(:can_edit?).with(post).returns(false) + Post.any_instance.stubs(:edit_time_limit_expired?).returns(true) + + xhr :put, :update, update_params + + response.status.should == 422 + JSON.parse(response.body)['errors'].should include(I18n.t('too_late_to_edit')) + end + it 'passes the image sizes through' do Post.any_instance.expects(:image_sizes=) xhr :put, :update, update_params