Merge pull request #5437 from AntonKhorev/user-status-resource

Use resourceful route for user status
This commit is contained in:
Andy Allan 2025-01-17 17:55:02 +00:00 committed by GitHub
commit 4370fe45ad
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 141 additions and 129 deletions

View file

@ -0,0 +1,64 @@
require "test_helper"
module Users
class StatusesControllerTest < ActionDispatch::IntegrationTest
##
# test all routes which lead to this controller
def test_routes
assert_routing(
{ :path => "/user/username/status", :method => :put },
{ :controller => "users/statuses", :action => "update", :user_display_name => "username" }
)
end
def test_update
user = create(:user)
# Try without logging in
put user_status_path(user, :event => "confirm")
assert_response :forbidden
# Now try as a normal user
session_for(user)
put user_status_path(user, :event => "confirm")
assert_redirected_to :controller => "/errors", :action => :forbidden
# Finally try as an administrator
session_for(create(:administrator_user))
put user_status_path(user, :event => "confirm")
assert_redirected_to user_path(user)
assert_equal "confirmed", User.find(user.id).status
end
def test_destroy
user = create(:user, :home_lat => 12.1, :home_lon => 12.1, :description => "test")
# Try without logging in
put user_status_path(user, :event => "soft_destroy")
assert_response :forbidden
# Now try as a normal user
session_for(user)
put user_status_path(user, :event => "soft_destroy")
assert_redirected_to :controller => "/errors", :action => :forbidden
# Finally try as an administrator
session_for(create(:administrator_user))
put user_status_path(user, :event => "soft_destroy")
assert_redirected_to user_path(user)
# Check that the user was deleted properly
user.reload
assert_equal "user_#{user.id}", user.display_name
assert_equal "", user.description
assert_nil user.home_lat
assert_nil user.home_lon
assert_not user.avatar.attached?
assert_not user.email_valid
assert_nil user.new_email
assert_nil user.auth_provider
assert_nil user.auth_uid
assert_equal "deleted", user.status
end
end
end

View file

@ -28,15 +28,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
{ :path => "/user/username", :method => :get },
{ :controller => "users", :action => "show", :display_name => "username" }
)
assert_routing(
{ :path => "/user/username/set_status", :method => :post },
{ :controller => "users", :action => "set_status", :display_name => "username" }
)
assert_routing(
{ :path => "/user/username", :method => :delete },
{ :controller => "users", :action => "destroy", :display_name => "username" }
)
end
# The user creation page loads
@ -332,56 +323,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest
end
end
def test_set_status
user = create(:user)
# Try without logging in
post set_status_user_path(user), :params => { :event => "confirm" }
assert_response :forbidden
# Now try as a normal user
session_for(user)
post set_status_user_path(user), :params => { :event => "confirm" }
assert_redirected_to :controller => :errors, :action => :forbidden
# Finally try as an administrator
session_for(create(:administrator_user))
post set_status_user_path(user), :params => { :event => "confirm" }
assert_redirected_to :action => :show, :display_name => user.display_name
assert_equal "confirmed", User.find(user.id).status
end
def test_destroy
user = create(:user, :home_lat => 12.1, :home_lon => 12.1, :description => "test")
# Try without logging in
delete user_path(user)
assert_response :forbidden
# Now try as a normal user
session_for(user)
delete user_path(user)
assert_redirected_to :controller => :errors, :action => :forbidden
# Finally try as an administrator
session_for(create(:administrator_user))
delete user_path(user)
assert_redirected_to :action => :show, :display_name => user.display_name
# Check that the user was deleted properly
user.reload
assert_equal "user_#{user.id}", user.display_name
assert_equal "", user.description
assert_nil user.home_lat
assert_nil user.home_lon
assert_not user.avatar.attached?
assert_not user.email_valid
assert_nil user.new_email
assert_nil user.auth_provider
assert_nil user.auth_uid
assert_equal "deleted", user.status
end
def test_auth_failure_callback
get auth_failure_path
assert_redirected_to login_path