Merge pull request #1971 from velesin/posts_controller_refactoring

Refactors PostsController and adds unit tests.
This commit is contained in:
Sam 2014-02-19 08:34:40 +11:00
commit 43612e9fde
2 changed files with 26 additions and 2 deletions

View File

@ -64,7 +64,7 @@ class PostsController < ApplicationController
post = post.first post = post.first
post.image_sizes = params[:image_sizes] if params[:image_sizes].present? 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 render json: {errors: [I18n.t('too_late_to_edit')]}, status: 422
return return
end end
@ -134,7 +134,7 @@ class PostsController < ApplicationController
def destroy def destroy
post = find_post_from_params 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 render json: {errors: [I18n.t('too_late_to_edit')]}, status: 422
return return
end end
@ -269,4 +269,8 @@ class PostsController < ApplicationController
end end
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 end

View File

@ -79,6 +79,16 @@ describe PostsController do
let(:user) { log_in(:moderator) } let(:user) { log_in(:moderator) }
let(:post) { Fabricate(:post, user: user, post_number: 2) } 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 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) Guardian.any_instance.expects(:can_delete?).with(post).returns(false)
xhr :delete, :destroy, id: post.id xhr :delete, :destroy, id: post.id
@ -195,6 +205,16 @@ describe PostsController do
} }
end 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 it 'passes the image sizes through' do
Post.any_instance.expects(:image_sizes=) Post.any_instance.expects(:image_sizes=)
xhr :put, :update, update_params xhr :put, :update, update_params