-
Notifications
You must be signed in to change notification settings - Fork 109
/
devise_spec.rb
74 lines (57 loc) · 1.49 KB
/
devise_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 "#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