Module: ActiveAdmin::Oidc::TestHelpers

Defined in:
lib/activeadmin/oidc/test_helpers.rb

Overview

Test helpers for host apps. Include in your RSpec config:

require "activeadmin/oidc/test_helpers"

RSpec.configure do |config|
  config.include ActiveAdmin::Oidc::TestHelpers, oidc_mode: true
  config.after(:each, :oidc_mode) { reset_oidc_stubs }
end

Then in specs tagged ‘oidc_mode: true`:

before { (sub: "alice-sub", claims: { "email" => "a@b" }) }

Constant Summary collapse

DEFAULT_CLAIMS =
{
  'preferred_username' => 'alice',
  'email' => 'alice@test',
  'roles' => ['admin']
}.freeze

Instance Method Summary collapse

Instance Method Details

#reset_oidc_stubsObject

Resets OmniAuth test mode. Call in an ‘after` hook.



60
61
62
63
64
# File 'lib/activeadmin/oidc/test_helpers.rb', line 60

def reset_oidc_stubs
  OmniAuth.config.mock_auth[:oidc] = nil
  OmniAuth.config.test_mode = false
  OmniAuth.config.request_validation_phase = @_oidc_saved_request_validation_phase if defined?(@_oidc_saved_request_validation_phase)
end

#stub_oidc_failure(message_key = :invalid_credentials) ⇒ Object

Stubs OmniAuth to simulate a strategy failure.



52
53
54
55
56
57
# File 'lib/activeadmin/oidc/test_helpers.rb', line 52

def stub_oidc_failure(message_key = :invalid_credentials)
  OmniAuth.config.test_mode = true
  @_oidc_saved_request_validation_phase = OmniAuth.config.request_validation_phase
  OmniAuth.config.request_validation_phase = nil
  OmniAuth.config.mock_auth[:oidc] = message_key
end

#stub_oidc_sign_in(sub: 'alice-sub', claims: {}) ⇒ Object

Stubs OmniAuth to return a successful OIDC auth hash. Merges the given claims with DEFAULT_CLAIMS.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/activeadmin/oidc/test_helpers.rb', line 29

def (sub: 'alice-sub', claims: {})
  merged = DEFAULT_CLAIMS.merge(claims.transform_keys(&:to_s))
  OmniAuth.config.test_mode = true
  # OmniAuth 2.x still runs request_validation_phase in test mode
  # (mock_request_call, line 325 of strategy.rb). Disable it so
  # the CSRF check from omniauth-rails_csrf_protection doesn't
  # reject the mocked request.
  @_oidc_saved_request_validation_phase = OmniAuth.config.request_validation_phase
  OmniAuth.config.request_validation_phase = nil
  OmniAuth.config.mock_auth[:oidc] = OmniAuth::AuthHash.new(
    provider: 'oidc',
    uid: sub,
    info: {
      email: merged['email'],
      name: merged['name'],
      nickname: merged['preferred_username']
    },
    credentials: {},
    extra: { raw_info: merged.merge('sub' => sub) }
  )
end