Sha256: bbe44e696186054c53d0f33cc59959dfb31e131d4a2ac1ff53eb63466f84285e

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

require 'spec_helper'
require 'switch_user/provider/devise'

class FakeWarden
  attr_reader :user_hash

  def initialize
    @user_hash = {}
  end

  def set_user(user, args)
    scope = args.fetch(:scope, :user)
    @user_hash[scope] = user
  end

  def logout(scope)
    @user_hash.delete(scope)
  end
end

class DeviseController
  def warden
    @warden ||= FakeWarden.new
  end

  def current_user
    @warden.user_hash[:user]
  end

  def current_admin
    @warden.user_hash[:admin]
  end
end

describe SwitchUser::Provider::Devise do
  let(:controller) { DeviseController.new }
  let(:provider) { SwitchUser::Provider::Devise.new(controller) }
  let(:user) { stub(:user) }

  it_behaves_like "a provider"

  it "can use alternate scopes" do
    user = stub(:user)
    provider.login(user, :admin)

    provider.current_user(:admin).should == user
  end

  describe "#login_exclusive" do
    before do
      SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
      provider.login(user, :admin)
      provider.login_exclusive(user, :scope => "user")
    end

    it "logs the user in" do
      provider.current_user.should == user
    end

    it "logs out other scopes" do
      provider.current_user(:admin).should be_nil
    end
  end

  describe "#logout_all" do
    it "logs out users under all scopes" do
      SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
      provider.login(user, :admin)
      provider.login(user, :user)

      provider.logout_all

      provider.current_user(:admin).should be_nil
      provider.current_user(:user).should be_nil
    end
  end

  describe "#all_current_users" do
    it "pulls users from an alternate scope" do
      SwitchUser.stub(:available_users => {:user => nil, :admin => nil})
      provider.login(user, :admin)

      provider.current_users_without_scope.should == [user]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
switch_user-0.9.1 spec/provider/devise_spec.rb
switch_user-0.9.0 spec/provider/devise_spec.rb