module Warden::Test::Mock

def self.included(_base)

def self.included(_base)
  ::Warden.test_mode!
end

def app

def app
  @app ||= begin
    opts = {
      failure_app: lambda { |_e|
        [401, { 'Content-Type' => 'text/plain' }, ['You Fail!']]
      },
      default_strategies: :password,
      default_serializers: :session
    }
    Rack::Builder.new do
      use Warden::Test::Mock::Session
      use Warden::Manager, opts, &proc {}
      run lambda { |_e|
        [200, { 'Content-Type' => 'text/plain' }, ['You Win']]
      }
    end
  end
end

def env

def env
  @env ||= begin
    request = Rack::MockRequest.env_for(
      "/?#{Rack::Utils.build_query({})}",
      { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => 'GET' }
    )
    app.call(request)
    request
  end
end

def warden

Other tags:
    Api: - public
def warden
  @warden ||= begin
    env['warden']
  end
end