From 38ed1d8562e61ae835638a40928876c4b5ca7d37 Mon Sep 17 00:00:00 2001 From: ArtOfCode- <hello@artofcode.co.uk> Date: Mon, 14 Dec 2020 01:03:13 +0000 Subject: [PATCH] Full close tests --- test/controllers/posts_controller_test.rb | 62 +++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/test/controllers/posts_controller_test.rb b/test/controllers/posts_controller_test.rb index 4f468979b..9c3465f19 100644 --- a/test/controllers/posts_controller_test.rb +++ b/test/controllers/posts_controller_test.rb @@ -316,4 +316,66 @@ class PostsControllerTest < ActionController::TestCase end assert_equal 'success', JSON.parse(response.body)['status'] end + + test 'close requires authentication' do + post :close, params: { id: posts(:question_one).id, reason_id: close_reasons(:not_good).id } + assert_response 302 + assert_redirected_to new_user_session_path + end + + test 'unprivileged user cannot close' do + sign_in users(:standard_user) + before_history = PostHistory.where(post: posts(:question_one)).count + post :close, params: { id: posts(:question_one).id, reason_id: close_reasons(:not_good).id } + after_history = PostHistory.where(post: posts(:question_one)).count + assert_response 403 + assert_not_nil assigns(:post) + assert_equal before_history, after_history, 'PostHistory event incorrectly created on closure' + assert_nothing_raised do + JSON.parse(response.body) + end + assert_equal 'failed', JSON.parse(response.body)['status'] + end + + test 'cannot close a closed post' do + sign_in users(:closer) + before_history = PostHistory.where(post: posts(:closed)).count + post :close, params: { id: posts(:closed).id, reason_id: close_reasons(:not_good).id } + after_history = PostHistory.where(post: posts(:closed)).count + assert_response 400 + assert_not_nil assigns(:post) + assert_equal before_history, after_history, 'PostHistory event incorrectly created on closure' + assert_nothing_raised do + JSON.parse(response.body) + end + assert_equal 'failed', JSON.parse(response.body)['status'] + end + + test 'close rejects nonexistent close reason' do + sign_in users(:closer) + before_history = PostHistory.where(post: posts(:question_one)).count + post :close, params: { id: posts(:question_one).id, reason_id: -999 } + after_history = PostHistory.where(post: posts(:question_one)).count + assert_response 404 + assert_not_nil assigns(:post) + assert_equal before_history, after_history, 'PostHistory event incorrectly created on closure' + assert_nothing_raised do + JSON.parse(response.body) + end + assert_equal 'failed', JSON.parse(response.body)['status'] + end + + test 'close ensures other post exists if reason requires it' do + sign_in users(:closer) + before_history = PostHistory.where(post: posts(:question_one)).count + post :close, params: { id: posts(:question_one).id, reason_id: close_reasons(:duplicate) } + after_history = PostHistory.where(post: posts(:question_one)).count + assert_response 400 + assert_not_nil assigns(:post) + assert_equal before_history, after_history, 'PostHistory event incorrectly created on closure' + assert_nothing_raised do + JSON.parse(response.body) + end + assert_equal 'failed', JSON.parse(response.body)['status'] + end end -- GitLab