Module: StandardId::Testing::AuthenticationHelpers
- Defined in:
- lib/standard_id/testing/authentication_helpers.rb
Overview
Helpers for stubbing StandardId authentication in controller and request specs.
Usage in rails_helper.rb:
require "standard_id/testing"
RSpec.configure do |config|
config.include StandardId::Testing::AuthenticationHelpers, type: :request
config.include StandardId::Testing::AuthenticationHelpers, type: :controller
end
Instance Method Summary collapse
-
#stub_api_authentication(account:, session: nil, controller_class: nil) ⇒ Object
Stub API (JWT-based) authentication for controllers that include StandardId::ApiAuthentication.
-
#stub_web_authentication(account:, controller_class: ApplicationController) ⇒ Object
Stub web (cookie-based) authentication for controllers that include StandardId::WebAuthentication.
Instance Method Details
#stub_api_authentication(account:, session: nil, controller_class: nil) ⇒ Object
Stub API (JWT-based) authentication for controllers that include StandardId::ApiAuthentication.
Example:
stub_api_authentication(account: my_account)
stub_api_authentication(account: my_account, session: mock_session)
When controller_class is not provided, defaults to Api::BaseController — the conventional base class generated by StandardId’s install generator.
Note: Uses allow_any_instance_of which RSpec discourages. For more targeted stubbing, pass the exact controller class your spec exercises:
stub_api_authentication(account: my_account, controller_class: Api::V1::WidgetsController)
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/standard_id/testing/authentication_helpers.rb', line 57 def stub_api_authentication(account:, session: nil, controller_class: nil) if controller_class.nil? unless defined?(Api::BaseController) raise ArgumentError, "Could not infer API controller class. Api::BaseController is not defined. " \ "Pass controller_class: explicitly (e.g. controller_class: YourApi::BaseController)." end controller_class = Api::BaseController end allow_any_instance_of(controller_class).to receive(:current_account).and_return(account) allow_any_instance_of(controller_class).to receive(:authenticated?).and_return(account.present?) allow_any_instance_of(controller_class).to receive(:verify_access_token!).and_return(true) allow_any_instance_of(controller_class).to receive(:current_session).and_return(session) end |
#stub_web_authentication(account:, controller_class: ApplicationController) ⇒ Object
Stub web (cookie-based) authentication for controllers that include StandardId::WebAuthentication.
Stubs the following methods on the given controller class:
-
current_account → returns the given account
-
authenticated? → true when account is present
-
authenticate_account! → no-op (returns true)
-
require_browser_session! → no-op (returns true)
Example:
stub_web_authentication(account: my_account)
stub_web_authentication(account: my_account, controller_class: BackendController)
31 32 33 34 35 36 |
# File 'lib/standard_id/testing/authentication_helpers.rb', line 31 def stub_web_authentication(account:, controller_class: ApplicationController) allow_any_instance_of(controller_class).to receive(:current_account).and_return(account) allow_any_instance_of(controller_class).to receive(:authenticated?).and_return(account.present?) allow_any_instance_of(controller_class).to receive(:authenticate_account!).and_return(true) allow_any_instance_of(controller_class).to receive(:require_browser_session!).and_return(true) end |