X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/ffda8d7ac5ca4f40a1211225dd3e1c898fc232a8..fb854652ea47d7b3fa1657722f1da768eaba4f25:/test/controllers/user_blocks_controller_test.rb diff --git a/test/controllers/user_blocks_controller_test.rb b/test/controllers/user_blocks_controller_test.rb index 97f517133..e6782a64d 100644 --- a/test/controllers/user_blocks_controller_test.rb +++ b/test/controllers/user_blocks_controller_test.rb @@ -13,10 +13,6 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest { :path => "/user_blocks", :method => :get }, { :controller => "user_blocks", :action => "index" } ) - assert_routing( - { :path => "/user_blocks/new", :method => :get }, - { :controller => "user_blocks", :action => "new" } - ) assert_routing( { :path => "/user_blocks", :method => :post }, { :controller => "user_blocks", :action => "create" } @@ -169,6 +165,52 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest assert_not UserBlock.find(active_block.id).needs_view end + ## + # test edit/revoke link for active blocks + def test_active_block_buttons + creator_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :creator => creator_user) + + session_for(other_moderator_user) + check_block_buttons block, :revoke => 1 + + session_for(creator_user) + check_block_buttons block, :edit => 1, :revoke => 1 + end + + ## + # test the edit link for expired blocks + def test_expired_block_buttons + creator_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :expired, :creator => creator_user) + + session_for(other_moderator_user) + check_block_buttons block + + session_for(creator_user) + check_block_buttons block, :edit => 1 + end + + ## + # test the edit link for revoked blocks + def test_revoked_block_buttons + creator_user = create(:moderator_user) + revoker_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :revoked, :creator => creator_user, :revoker => revoker_user) + + session_for(other_moderator_user) + check_block_buttons block + + session_for(creator_user) + check_block_buttons block, :edit => 1 + + session_for(revoker_user) + check_block_buttons block, :edit => 1 + end + ## # test the new action def test_new @@ -244,6 +286,34 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest assert_select "p", "Sorry, the user block with ID 99999 could not be found." end + ## + # test the edit action when the remaining block duration doesn't match the available select options + def test_edit_duration + moderator_user = create(:moderator_user) + + freeze_time do + active_block = create(:user_block, :creator => moderator_user, :ends_at => Time.now.utc + 96.hours) + + session_for(moderator_user) + get edit_user_block_path(active_block) + + assert_select "form#edit_user_block_#{active_block.id}", :count => 1 do + assert_select "select#user_block_period", :count => 1 do + assert_select "option[value='96'][selected]", :count => 1 + end + end + + travel 2.hours + get edit_user_block_path(active_block) + + assert_select "form#edit_user_block_#{active_block.id}", :count => 1 do + assert_select "select#user_block_period", :count => 1 do + assert_select "option[value='96'][selected]", :count => 1 + end + end + end + end + ## # test the create action def test_create @@ -278,10 +348,9 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest :user_block_period => "12", :user_block => { :needs_view => false, :reason => "Vandalism" }) end - id = UserBlock.order(:id).ids.last - assert_redirected_to user_block_path(:id => id) + b = UserBlock.last + assert_redirected_to user_block_path(:id => b.id) assert_equal "Created a block on user #{target_user.display_name}.", flash[:notice] - b = UserBlock.find(id) assert_in_delta Time.now.utc, b.created_at, 1 assert_in_delta Time.now.utc, b.updated_at, 1 assert_in_delta Time.now.utc + 12.hours, b.ends_at, 1 @@ -314,7 +383,7 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest :user_block_period => "336", :user_block => { :needs_view => false, :reason => "Vandalism" }) - block = UserBlock.order(:id).last + block = UserBlock.last assert_equal 1209600, block.ends_at - block.created_at end @@ -378,6 +447,52 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest assert_select "p", "Sorry, the user block with ID 99999 could not be found." end + ## + # test the update action on expired blocks + def test_update_expired + creator_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :expired, :creator => creator_user, :reason => "Original Reason") + + session_for(other_moderator_user) + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => false, :reason => "Updated Reason" }) + assert_redirected_to edit_user_block_path(block) + assert_equal "Only the moderator who created this block can edit it.", flash[:error] + block.reload + assert_not block.active? + assert_equal "Original Reason", block.reason + + session_for(creator_user) + check_inactive_block_updates(block) + end + + ## + # test the update action on revoked blocks + def test_update_revoked + creator_user = create(:moderator_user) + revoker_user = create(:moderator_user) + other_moderator_user = create(:moderator_user) + block = create(:user_block, :revoked, :creator => creator_user, :revoker => revoker_user, :reason => "Original Reason") + + session_for(other_moderator_user) + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => false, :reason => "Updated Reason" }) + assert_redirected_to edit_user_block_path(block) + assert_equal "Only the moderators who created or revoked this block can edit it.", flash[:error] + block.reload + assert_not_predicate block, :active? + assert_equal "Original Reason", block.reason + + session_for(creator_user) + check_inactive_block_updates(block) + + session_for(revoker_user) + check_inactive_block_updates(block) + end + ## # test the revoke action def test_revoke @@ -670,6 +785,59 @@ class UserBlocksControllerTest < ActionDispatch::IntegrationTest private + def check_block_buttons(block, edit: 0, revoke: 0) + [user_blocks_path, user_block_path(block)].each do |path| + get path + assert_response :success + assert_select "a[href='#{edit_user_block_path block}']", :count => edit + assert_select "a[href='#{revoke_user_block_path block}']", :count => revoke + end + end + + def check_inactive_block_updates(block) + original_ends_at = block.ends_at + + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => false, :reason => "Updated Reason" }) + assert_redirected_to user_block_path(block) + assert_equal "Block updated.", flash[:notice] + block.reload + assert_not_predicate block, :active? + assert_equal "Updated Reason", block.reason + assert_equal original_ends_at, block.ends_at + + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => true, :reason => "Updated Reason Needs View" }) + assert_response :success + assert_equal "This block is inactive and cannot be reactivated.", flash[:error] + block.reload + assert_not_predicate block, :active? + assert_equal "Updated Reason", block.reason + assert_equal original_ends_at, block.ends_at + + put user_block_path(block, + :user_block_period => "1", + :user_block => { :needs_view => false, :reason => "Updated Reason Duration Extended" }) + assert_response :success + assert_equal "This block is inactive and cannot be reactivated.", flash[:error] + block.reload + assert_not_predicate block, :active? + assert_equal "Updated Reason", block.reason + assert_equal original_ends_at, block.ends_at + + put user_block_path(block, + :user_block_period => "0", + :user_block => { :needs_view => false, :reason => "Updated Reason Again" }) + assert_redirected_to user_block_path(block) + assert_equal "Block updated.", flash[:notice] + block.reload + assert_not_predicate block, :active? + assert_equal "Updated Reason Again", block.reason + assert_equal original_ends_at, block.ends_at + end + def check_user_blocks_table(user_blocks) assert_dom "table#block_list tbody tr" do |rows| assert_equal user_blocks.count, rows.count, "unexpected number of rows in user blocks table"