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

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: )
stub_api_authentication(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: , controller_class: Api::V1::WidgetsController)

Parameters:

  • account (Object)

    the account to return from current_account

  • session (Object, nil) (defaults to: nil)

    optional session object for current_session

  • controller_class (Class) (defaults to: nil)

    the controller class to stub (default: inferred)



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()
  allow_any_instance_of(controller_class).to receive(:authenticated?).and_return(.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: )
stub_web_authentication(account: , controller_class: BackendController)

Parameters:

  • account (Object)

    the account to return from current_account

  • controller_class (Class) (defaults to: ApplicationController)

    the controller class to stub (default: ApplicationController)



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()
  allow_any_instance_of(controller_class).to receive(:authenticated?).and_return(.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