test: cover AuthSessionsController and create

This commit is contained in:
dualfroz committed 2026-09-09 16:07:56 +02:00
1 parent ac1bd7164d
commit 3163f1966d
1 file changed
+161
+161
View File
@@ -0,0 +1,161 @@
require 'minitest/autorun'
require 'prism'
require 'support'
require 'tmpdir'
class AuthSessionsController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser
def create
user = AuthUser.find_by(email: params['email'])
if user && user.authenticate(params['password'])
sign_in(user)
halt(200, after_authentication_url)
else
halt(401, 'invalid credentials')
end
end
def destroy
sign_out
halt(200, 'signed out')
end
end
class AuthDashboardController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, unauthenticated_redirect_path: '/sign_in'
before_action :require_authentication
def index
halt(200, "hello #{current_user.email}")
end
end
class AuthApiController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser
before_action :require_authentication
def index
halt(200, "hello #{current_user.email}")
end
end
class AuthRememberSessionsController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, remember_cookie: :remember_token
def create
user = AuthUser.find_by(email: params['email'])
if user && user.authenticate(params['password'])
sign_in(user, remember: params['remember'] == '1')
halt(200, 'signed in')
else
halt(401, 'invalid credentials')
end
end
def destroy
sign_out
halt(200, 'signed out')
end
end
class AuthRememberDashboardController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, unauthenticated_redirect_path: '/sign_in', remember_cookie: :remember_token
before_action :require_authentication
def index
halt(200, "hello #{current_user.email}")
end
end
# `authenticate_with` is declared only on the base class here, the way a
# real app declares it once on ApplicationController - proving the setting
# (and its unauthenticated_redirect_path) reaches a subclass that never
# calls `authenticate_with` itself.
class AuthBaseController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, unauthenticated_redirect_path: '/sign_in'
end
class AuthInheritedController < AuthBaseController
before_action :require_authentication
def index
halt(200, "hello #{current_user.email}")
end
end
class AuthMultiSessionsController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, remember_sessions: :AuthLoginSession
def create
user = AuthUser.find_by(email: params['email'])
if user && user.authenticate(params['password'])
sign_in(user, remember: params['remember'] == '1')
halt(200, 'signed in')
else
halt(401, 'invalid credentials')
end
end
def destroy
sign_out
halt(200, 'signed out')
end
end
class AuthMultiDashboardController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, unauthenticated_redirect_path: '/sign_in', remember_sessions: :AuthLoginSession
before_action :require_authentication
def index
halt(200, "hello #{current_user.email}")
end
def other_devices
halt(200, other_login_sessions.count.to_s)
end
def sign_out_others
sign_out_all_other_sessions
halt(200, other_login_sessions.count.to_s)
end
def revoke
# Deliberately the raw String params['id'] gives, not params['id'].to_i -
# a real controller (see examples/blog's LoginSessionsController) has no
# reason to convert it itself; revoke_login_session! must do that on its
# own or every real HTTP request would silently no-op (see its comment).
ok = revoke_login_session!(params['id'])
halt(ok ? 200 : 404, ok ? 'revoked' : 'not found')
end
end
class AuthCappedSessionsController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, remember_sessions: :AuthLoginSession, max_remember_sessions: 2
def create
user = AuthUser.find_by(email: params['email'])
if user && user.authenticate(params['password'])
sign_in(user, remember: true)
halt(200, 'signed in')
else
halt(401, 'invalid credentials')
end
end
end
class AuthCappedDashboardController < Prism::Controller
include Prism::Authenticatable
authenticate_with model: :AuthUser, unauthenticated_redirect_path: '/sign_in',
remember_sessions: :AuthLoginSession, max_remember_sessions: 2
before_action :require_authentication