{ :path => "/user/username/blocks_by", :method => :get },
{ :controller => "user_blocks", :action => "blocks_by", :display_name => "username" }
)
+ assert_routing(
+ { :path => "/user/username/blocks/revoke_all", :method => :get },
+ { :controller => "user_blocks", :action => "revoke_all", :display_name => "username" }
+ )
+ assert_routing(
+ { :path => "/user/username/blocks/revoke_all", :method => :post },
+ { :controller => "user_blocks", :action => "revoke_all", :display_name => "username" }
+ )
end
##
assert_redirected_to user_block_path(:id => id)
assert_equal "Created a block on user #{target_user.display_name}.", flash[:notice]
b = UserBlock.find(id)
- assert_in_delta Time.now, b.created_at, 1
- assert_in_delta Time.now, b.updated_at, 1
- assert_in_delta Time.now + 12.hours, b.ends_at, 1
+ 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
assert_not b.needs_view
assert_equal "Vandalism", b.reason
assert_equal "markdown", b.reason_format
assert_select "h1", "The user non_existent_user does not exist"
end
+ ##
+ # test the duration of a created block
+ def test_create_duration
+ target_user = create(:user)
+ moderator_user = create(:moderator_user)
+
+ session_for(moderator_user)
+ post user_blocks_path(:display_name => target_user.display_name,
+ :user_block_period => "336",
+ :user_block => { :needs_view => false, :reason => "Vandalism" })
+
+ block = UserBlock.order(:id).last
+ assert_equal 1209600, block.ends_at - block.created_at
+ end
+
##
# test the update action
def test_update
assert_redirected_to user_block_path(active_block)
assert_equal "Block updated.", flash[:notice]
b = UserBlock.find(active_block.id)
- assert_in_delta Time.now, b.updated_at, 1
+ assert_in_delta Time.now.utc, b.updated_at, 1
assert b.needs_view
assert_equal "Vandalism", b.reason
assert_select "input[type='submit'][value='Revoke!']", :count => 1
end
- # Check that revoking a block works
+ # Check that revoking a block using GET should fail
+ get revoke_user_block_path(:id => active_block, :confirm => true)
+ assert_response :success
+ assert_template "revoke"
+ b = UserBlock.find(active_block.id)
+ assert_operator b.ends_at - Time.now.utc, :>, 100
+
+ # Check that revoking a block works using POST
post revoke_user_block_path(:id => active_block, :confirm => true)
assert_redirected_to user_block_path(active_block)
b = UserBlock.find(active_block.id)
- assert_in_delta Time.now, b.ends_at, 1
+ assert_in_delta Time.now.utc, b.ends_at, 1
# We should get an error if the block doesn't exist
get revoke_user_block_path(:id => 99999)
assert_select "p", "Sorry, the user block with ID 99999 could not be found."
end
+ ##
+ # test the revoke all page
+ def test_revoke_all_page
+ blocked_user = create(:user)
+ create(:user_block, :user => blocked_user)
+
+ # Asking for the revoke all blocks page with a bogus user name should fail
+ get user_blocks_on_path(:display_name => "non_existent_user")
+ assert_response :not_found
+
+ # Check that the revoke all blocks page requires us to login
+ get revoke_all_user_blocks_path(blocked_user)
+ assert_redirected_to login_path(:referer => revoke_all_user_blocks_path(blocked_user))
+
+ # Login as a normal user
+ session_for(create(:user))
+
+ # Check that normal users can't load the revoke all blocks page
+ get revoke_all_user_blocks_path(blocked_user)
+ assert_response :redirect
+ assert_redirected_to :controller => "errors", :action => "forbidden"
+
+ # Login as a moderator
+ session_for(create(:moderator_user))
+
+ # Check that the revoke all blocks page loads for moderators
+ get revoke_all_user_blocks_path(blocked_user)
+ assert_response :success
+ end
+
+ ##
+ # test the revoke all action
+ def test_revoke_all_action
+ blocked_user = create(:user)
+ active_block1 = create(:user_block, :user => blocked_user)
+ active_block2 = create(:user_block, :user => blocked_user)
+ expired_block1 = create(:user_block, :expired, :user => blocked_user)
+ blocks = [active_block1, active_block2, expired_block1]
+ moderator_user = create(:moderator_user)
+
+ assert_predicate active_block1, :active?
+ assert_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+
+ # Login as a normal user
+ session_for(create(:user))
+
+ # Check that normal users can't load the block revoke page
+ get revoke_all_user_blocks_path(:blocked_user)
+ assert_response :redirect
+ assert_redirected_to :controller => "errors", :action => "forbidden"
+
+ # Login as a moderator
+ session_for(moderator_user)
+
+ # Check that revoking blocks using GET should fail
+ get revoke_all_user_blocks_path(blocked_user, :confirm => true)
+ assert_response :success
+ assert_template "revoke_all"
+
+ blocks.each(&:reload)
+ assert_predicate active_block1, :active?
+ assert_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+
+ # Check that revoking blocks works using POST
+ post revoke_all_user_blocks_path(blocked_user, :confirm => true)
+ assert_redirected_to user_blocks_on_path(blocked_user)
+
+ blocks.each(&:reload)
+ assert_not_predicate active_block1, :active?
+ assert_not_predicate active_block2, :active?
+ assert_not_predicate expired_block1, :active?
+ assert_equal moderator_user, active_block1.revoker
+ assert_equal moderator_user, active_block2.revoker
+ assert_not_equal moderator_user, expired_block1.revoker
+ end
+
##
# test the blocks_on action
def test_blocks_on