module Devise::Test::IntegrationHelpers

def self.included(base)

def self.included(base)
  base.class_eval do
    include Warden::Test::Helpers
    setup :setup_integration_for_devise
    teardown :teardown_integration_for_devise
  end
end

def setup_integration_for_devise

def setup_integration_for_devise
  Warden.test_mode!
end

def sign_in(resource, scope: nil)

should be signed in with.
* +scope+ - An optional +Symbol+ with the scope where the resource
* +resource+ - The resource that should be authenticated

operation through +Devise::SessionsController#create+.
Signs in a specific resource, mimicking a successful sign in
def sign_in(resource, scope: nil)
  scope ||= Devise::Mapping.find_scope!(resource)
  login_as(resource, scope: scope)
end

def sign_out(resource_or_scope)

* +resource_or_scope+ - The resource or scope that should be signed out.

Signs out a specific scope from the session.
def sign_out(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  logout scope
end

def teardown_integration_for_devise

def teardown_integration_for_devise
  Warden.test_reset!
end