public
Description: authentication for merb using dm core
Clone URL: git://github.com/BrianTheCoder/can_has_auth_core.git
slice-ifying can_has_auth_core
benburkert (author)
Mon May 26 20:50:01 -0700 2008
commit  2eb969a98d9b12de52e11bb805587697219b88f9
tree    fa9dabbb7e99d3b3bf5047638e5e79d0adf4fea8
parent  942f4168a11791b1e3a9c70d6bb0e1bd73c0382d
...
1
2
3
4
5
 
 
...
1
2
3
 
4
5
6
0
@@ -1,4 +1,5 @@
0
 log
0
 *.db
0
 tmp
0
-pkg
0
\ No newline at end of file
0
+pkg
0
+.DS_Store
...
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
0
@@ -1,92 +1,47 @@
0
-# -*- ruby -*-
0
-
0
-require "rake"
0
-require "rake/clean"
0
-require "rake/gempackagetask"
0
-require 'rake/rdoctask'
0
-require "spec"
0
-require "spec/rake/spectask"
0
-
0
-DIR = File.dirname(__FILE__)
0
-NAME = 'can_has_auth'
0
-SUMMARY =<<-EOS
0
-Drop in user authentication for merb with datamapper
0
-EOS
0
-
0
-require "lib/can_has_auth_core/version"
0
-
0
-spec = Gem::Specification.new do |s|
0
- s.name = "can_has_auth_core"
0
- s.version = "0.1.0"
0
- s.date = "2008-05-12"
0
- s.summary = "Drop in authentication for merb and dm-core 0.9.x"
0
- s.email = "brian@downtowncartel.com"
0
- s.homepage = "http://github.com/BrianTheCoder/can_has_auth_core/tree/master"
0
- s.description = "can_has_auth_core gives you basic authentication for merb using the latest trunk of dm-core"
0
- s.has_rdoc = false
0
- s.authors = ["Brian Smith"]
0
- s.files = %w(
0
- License.txt
0
- Manifest.txt
0
- README.txt
0
- Rakefile
0
- config/hoe.rb
0
- config/requirements.rb
0
- lib/can_has_auth_core.rb
0
- lib/can_has_auth_core/version.rb
0
- lib/can_has_auth_core/models/user.rb
0
- lib/can_has_auth_core/controllers/users.rb
0
- lib/can_has_auth_core/controllers/session.rb
0
- lib/can_has_auth_core/controllers/password.rb
0
- lib/can_has_auth_core/auth_model.rb
0
- lib/can_has_auth_core/auth_controller.rb
0
- lib/can_has_auth_core/mailers/user_mailer.rb
0
- lib/can_has_auth_core/views/session/new.html.erb
0
- lib/can_has_auth_core/views/users/new.html.erb
0
- lib/can_has_auth_core/views/users/activate.html.erb
0
- lib/can_has_auth_core/views/password/new.html.erb
0
- lib/can_has_auth_core/views/password/edit.html.erb
0
- lib/can_has_auth_core/views/password/reset.html.erb
0
- lib/can_has_auth_core/views/users/activate.html.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/signup.html.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/signup.text.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/activation.html.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/activation.text.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/reset_password.html.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/reset_password.text.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/forgot_password.html.erb
0
- lib/can_has_auth_core/mailers/views/user_mailer/forgot_password.text.erb
0
- spec/application.rb
0
- spec/authenticated_system_spec_helper.rb
0
- spec/spec_helper.rb
0
- spec/user_spec_helper.rb
0
- spec/controllers/password_spec.rb
0
- spec/controllers/users_spec.rb
0
- spec/controllers/session_spec.rb
0
- spec/models/user_spec.rb
0
- setup.rb
0
- )
0
- s.test_files = %w(
0
- spec/application.rb
0
- spec/authenticated_system_spec_helper.rb
0
- spec/spec_helper.rb
0
- spec/user_spec_helper.rb
0
- spec/controllers/password_spec.rb
0
- spec/controllers/users_spec.rb
0
- spec/controllers/session_spec.rb
0
- spec/models/user_spec.rb
0
- )
0
- s.extra_rdoc_files = ["Manifest.txt", "README.txt"]
0
-end
0
-
0
-Rake::GemPackageTask.new(spec) do |package|
0
- package.gem_spec = spec
0
- package.need_zip = true
0
- package.need_tar = true
0
-end
0
-
0
-desc "Run all specs"
0
-Spec::Rake::SpecTask.new("specs") do |t|
0
- t.spec_opts = ["--format", "specdoc", "--colour"]
0
- t.spec_files = Dir["spec/**/*_spec.rb"].sort
0
-end
0
+require 'rubygems'
0
+require 'rake/gempackagetask'
0
+require 'spec/rake/spectask'
0
+require 'merb-core/version'
0
+require 'merb-core/test/tasks/spectasks'
0
+
0
+PLUGIN = "can_has_auth"
0
+NAME = "can_has_auth"
0
+AUTHOR = "Brian Smith"
0
+EMAIL = "brian@downtowncartel.com"
0
+HOMEPAGE = "http://github.com/BrianTheCoder/can_has_auth_core/tree/master/"
0
+SUMMARY = "Merb Slice that provides drop in authentication for merb and dm-core 0.9.x"
0
+VERSION = "0.1.0"
0
+
0
+spec = Gem::Specification.new do |s|
0
+ s.name = NAME
0
+ s.version = VERSION
0
+ s.platform = Gem::Platform::RUBY
0
+ s.has_rdoc = true
0
+ s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
0
+ s.summary = SUMMARY
0
+ s.description = s.summary
0
+ s.author = AUTHOR
0
+ s.email = EMAIL
0
+ s.homepage = HOMEPAGE
0
+ s.add_dependency('merb-slices', '>= 0.9.4')
0
+ s.require_path = 'lib'
0
+ s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec,app,public}/**/*")
0
+end
0
+
0
+Rake::GemPackageTask.new(spec) do |pkg|
0
+ pkg.gem_spec = spec
0
+end
0
+
0
+desc "Install CanHasAuth as a gem"
0
+task :install => [:package] do
0
+ sh %{sudo gem install pkg/#{NAME}-#{VERSION} --no-update-sources --local}
0
+end
0
+
0
+namespace :jruby do
0
+
0
+ desc "Run :package and install the resulting .gem with jruby"
0
+ task :install => :package do
0
+ sh %{#{SUDO} jruby -S gem install pkg/#{NAME}-#{VERSION}.gem --no-rdoc --no-ri}
0
+ end
0
+
0
+end
0
\ No newline at end of file
...
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
75
76
77
 
 
 
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
159
 
160
...
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
 
121
122
0
@@ -1,159 +1,121 @@
0
 require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
0
-require File.join( File.dirname(__FILE__), "..", "user_spec_helper")
0
-require File.join( File.dirname(__FILE__), "..", "authenticated_system_spec_helper")
0
-
0
-describe Password,"new action" do
0
-
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- end
0
-
0
- it "should get new" do
0
- dispatch_to(Password, :new).should respond_successfully
0
- end
0
-end
0
-
0
-describe Password, "create action" do
0
-
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- @user = User.create(valid_user_hash)
0
- @user.save
0
- @user.activate
0
- end
0
-
0
- it "should forget password for valid email" do
0
- controller = dispatch_to(Password, :create, :email => valid_user_hash[:email])
0
- controller.should redirect
0
- user = User.first(:email => valid_user_hash[:email])
0
- user.password_reset_code.should_not be_nil
0
- end
0
-
0
- it "should not forget password for invalid email" do
0
- controller = dispatch_to(Password, :create, :email => "foo@bar.com")
0
- controller.should redirect
0
- @user.password_reset_code.should be_nil
0
- end
0
-end
0
-
0
-describe Password, "edit action" do
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- @user = User.create(valid_user_hash)
0
- @user.activate
0
- end
0
-
0
- it "a login is required for edit" do
0
- dispatch_to(Password, :edit).should redirect
0
- end
0
-
0
- it "should render edit" do
0
- controller = dispatch_to(Password, :edit) do |controller|
0
- controller.stub!(:current_user).and_return(@user)
0
+
0
+require File.dirname(__FILE__) + '/../spec_helper'
0
+
0
+module CanHasAuth
0
+ describe Password do
0
+ before(:all) do
0
+ Merb::Router.prepare { |r| r.add_slice(:CanHasAuth) } if standalone?
0
     end
0
- controller.should respond_successfully
0
- end
0
-end
0
-
0
-describe Password, "update action" do
0
-
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- @user = User.create(valid_user_hash)
0
- @user.activate
0
- @pass = "newpassword"
0
- end
0
-
0
- def dispatch_update(params)
0
- dispatch_to(Password, :update, params) do |controller|
0
- controller.stub!(:current_user).and_return(@user)
0
+
0
+ before(:each) do
0
+ User.auto_migrate!
0
     end
0
- end
0
-
0
- it "resets the password" do
0
- @user.forgot_password
0
- controller = dispatch_update(:user => {:password => @pass, :password_confirmation => @pass})
0
- controller.should redirect
0
- User.authenticate(valid_user_hash[:email], @pass).should == User.first(:email => valid_user_hash[:email])
0
- end
0
-
0
- it "changes the password" do
0
- controller = dispatch_update(:old_password => valid_user_hash[:password], :user => {:password => @pass, :password_confirmation => @pass})
0
- controller.should redirect
0
- User.authenticate(valid_user_hash[:email], @pass).should == User.first(:email => valid_user_hash[:email])
0
- end
0
-
0
- it "passwords must match" do
0
- controller = dispatch_update(:old_password => 'test', :user => {:password => @pass, :password_confirmation => 'test' })
0
- controller.should redirect
0
- User.authenticate(valid_user_hash[:email], @pass).should_not == User.first(:email => valid_user_hash[:email])
0
- end
0
-
0
- it "old password must be correct" do
0
- controller = dispatch_update(:old_password => 'wrong',:user => {:password => @pass, :password_confirmation => @pass} )
0
- controller.should redirect
0
- User.authenticate(valid_user_hash[:email], @pass).should_not == User.first(:email => valid_user_hash[:email])
0
- end
0
-end
0
-
0
-describe Password,"reset action" do
0
-
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- end
0
-
0
- it "should redirect to / if password code is nil" do
0
- dispatch_to(Password, :reset).should redirect_to('/')
0
- end
0
-
0
- it "should render if there's a valid password reset code" do
0
- user = User.create(valid_user_hash)
0
- user.activate
0
- user.forgot_password
0
- user.save
0
- controller = dispatch_to(Password, :reset, :code => user.password_reset_code)
0
- controller.should respond_successfully
0
- end
0
-end
0
 
0
-describe Password, "routes" do
0
- it "routed to Password#reset from 'password/reset'" do
0
- request = request_to("/password/reset")
0
- request[:controller].should == "password"
0
- request[:action].should == "reset"
0
- end
0
-
0
- it "routed to Password#new from 'password/new'" do
0
- request = request_to("/password/new")
0
- request[:controller].should == "password"
0
- request[:action].should == "new"
0
- end
0
-
0
- it "routed to Password#reset from 'password/edit'" do
0
- request = request_to("/password/edit")
0
- request[:controller].should == "password"
0
- request[:action].should == "edit"
0
- end
0
-
0
- it "routed to Password#reset from 'password/create' via :post" do
0
- request = request_to("/password", :post)
0
- request[:controller].should == "password"
0
- request[:action].should == "create"
0
- end
0
-
0
- it "routed to Password#reset from 'password/update' via :put" do
0
- request = request_to("/password", :put)
0
- request[:controller].should == "password"
0
- request[:action].should == "update"
0
+ describe "#new" do
0
+ it "should get new" do
0
+ dispatch_to(Password, :new).should respond_successfully
0
+ end
0
+ end
0
+
0
+ describe "#create" do
0
+ before(:each) do
0
+ @user = User.gen
0
+ @user.activate
0
+ @user.save
0
+ end
0
+
0
+ it "should forget password for valid email" do
0
+ controller = dispatch_to(Password, :create, :email => @user.email)
0
+ controller.should redirect
0
+ @user.reload
0
+ @user.password_reset_code.should_not be_nil
0
+ end
0
+
0
+ it "should not forget password for invalid email" do
0
+ controller = dispatch_to(Password, :create, :email => "foo@bar.com")
0
+ controller.should redirect
0
+ @user.reload
0
+ @user.password_reset_code.should be_nil
0
+ end
0
+ end
0
+
0
+ describe "#edit" do
0
+ before(:each) do
0
+ @user = User.gen
0
+ @user.activate
0
+ @user.save
0
+ end
0
+
0
+ it "a login is required for edit" do
0
+ dispatch_to(Password, :edit).should redirect
0
+ end
0
+
0
+ it "should render edit" do
0
+ controller = dispatch_to(Password, :edit) do |controller|
0
+ controller.stub!(:current_user).and_return(@user)
0
+ end
0
+ controller.should respond_successfully
0
+ end
0
+ end
0
+
0
+ describe "#update" do
0
+ before(:each) do
0
+ @user = User.gen
0
+ @user.activate
0
+ end
0
+
0
+ def dispatch_update(params)
0
+ dispatch_to(Password, :update, params) do |controller|
0
+ controller.stub!(:current_user).and_return(@user)
0
+ end
0
+ end
0
+
0
+ it "resets the password" do
0
+ new_password = Random.word
0
+ @user.forgot_password
0
+ @user.save
0
+ controller = dispatch_update(:user => {:password => new_password, :password_confirmation => new_password})
0
+ controller.should redirect
0
+
0
+ User.authenticate(@user.email, new_password).should be_same_as(controller.current_user)
0
+ end
0
+
0
+ it "changes the password" do
0
+ old_password, new_password = @user.password, Random.word
0
+ controller = dispatch_update(:old_password => old_password, :user => {:password => new_password, :password_confirmation => new_password})
0
+ controller.should redirect
0
+ User.authenticate(@user.email, new_password).crypted_password.should_not == @user.crypted_password
0
+ end
0
+
0
+ it "passwords must match" do
0
+ old_password, new_password = @user.password, Random.word
0
+ controller = dispatch_update(:old_password => old_password, :user => {:password => new_password, :password_confirmation => Random.word })
0
+ controller.should_not redirect
0
+ User.authenticate(@user.email, new_password).should be_nil
0
+ end
0
+
0
+ it "old password must be correct" do
0
+ old_password, new_password = @user.password, Random.word
0
+ controller = dispatch_update(:old_password => Random.word,:user => {:password => new_password, :password_confirmation => new_password} )
0
+ controller.should redirect
0
+ User.authenticate(@user.email, new_password).should be_nil
0
+ end
0
+ end
0
+
0
+ describe "#reset" do
0
+ it "should redirect to / if password code is nil" do
0
+ dispatch_to(Password, :reset).should redirect_to('/')
0
+ end
0
+
0
+ it "should render if there's a valid password reset code" do
0
+ user = User.gen
0
+ user.activate
0
+ user.forgot_password
0
+ user.save
0
+ controller = dispatch_to(Password, :reset, :code => user.password_reset_code)
0
+ controller.should respond_successfully
0
+ end
0
+ end
0
   end
0
-end
0
+end
0
\ No newline at end of file
...
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
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
 
 
 
 
 
 
 
108
109
110
111
112
113
114
 
 
 
 
 
 
 
 
 
115
...
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
0
@@ -1,115 +1,74 @@
0
 require File.join(File.dirname(__FILE__), "..", "spec_helper")
0
-require File.join( File.dirname(__FILE__), "..", "user_spec_helper")
0
-require File.join( File.dirname(__FILE__), "..", "authenticated_system_spec_helper")
0
 
0
-describe "Session Controller", "new action" do
0
- include UserSpecHelper
0
-
0
- it "should respond successfully" do
0
- dispatch_to(Session, :new).should respond_successfully
0
- end
0
-end
0
+module CanHasAuth
0
+ describe Session do
0
+ before(:all) do
0
+ Merb::Router.prepare { |r| r.add_slice(:CanHasAuth) } if standalone?
0
+ end
0
 
0
-describe "Session Controller", "login action" do
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- @quentin = User.create(valid_user_hash.with(:email => "quentin@example.com", :password => "test", :password_confirmation => "test"))
0
- @quentin.activate
0
- end
0
-
0
- it 'logins and redirects' do
0
- controller = dispatch_to(Session, :create, :email => 'quentin@example.com', :password => 'test')
0
- controller.session[:user].should_not be_nil
0
- controller.session[:user].should == @quentin.id
0
- controller.should redirect_to("/")
0
- end
0
-
0
- it 'fails login and does not redirect' do
0
- controller = dispatch_to(Session, :create, :method => :post, :email => 'quentin@example.com', :password => 'bad password')
0
- controller.should respond_successfully
0
- controller.session[:user].should be_nil
0
- end
0
-
0
- it 'remembers me' do
0
- controller = dispatch_to(Session,:create, :method => :post, :email => 'quentin@example.com', :password => 'test', :remember_me => "1")
0
- controller.cookies["auth_token"].should_not be_nil
0
- controller.should redirect
0
- end
0
-
0
- it 'does not remember me' do
0
- controller = dispatch_to(Session, :create,:method => :post, :email => 'quentin@example.com', :password => 'test', :remember_me => "0")
0
- controller.cookies["auth_token"].should be_nil
0
- controller.should redirect
0
- end
0
-
0
- it 'logs in with cookie' do
0
- @quentin.remember_me
0
- controller = get "/login" do |c|
0
- c.request.env[Merb::Const::HTTP_COOKIE] = "auth_token=#{@quentin.remember_token}"
0
+ before(:each) do
0
+ User.auto_migrate!
0
+ @user = User.gen
0
+ @user.activate
0
     end
0
- controller.should be_logged_in
0
- end
0
-end
0
 
0
-describe "Session Controller", "logout action" do
0
- include UserSpecHelper
0
-
0
- before(:each) do
0
- User.auto_migrate!
0
- @quentin = User.create(valid_user_hash.with(:email => "quentin@example.com", :password => "test", :password_confirmation => "test"))
0
- @quentin.activate
0
- end
0
-
0
- it 'logs out' do
0
- controller = dispatch_to(Session, :destroy) do
0
- self.stub!(:current_user).and_return(@quentin)
0
+ describe "#new" do
0
+ it "should respond successfully" do
0
+ dispatch_to(Session, :new).should respond_successfully
0
+ end
0
     end
0
- controller.session[:user].should be_nil
0
- controller.should redirect
0
- end
0
-
0
- it 'deletes token on logout' do
0
- controller = dispatch_to(Session, :destroy) do
0
- self.stub!(:current_user).and_return(@quentin)
0
+
0
+ describe "#login" do
0
+ it 'logins and redirects' do
0
+ controller = dispatch_to(Session, :create, :email => @user.email, :password => @user.password)
0
+ controller.session[:user].should_not be_nil
0
+ controller.session[:user].should == @user.id
0
+ controller.should redirect_to("/")
0
+ end
0
+
0
+ it 'fails login and does not redirect' do
0
+ controller = dispatch_to(Session, :create, :method => :post, :email => @user.email, :password => Random.word)
0
+ controller.should respond_successfully
0
+ controller.session[:user].should be_nil
0
+ end
0
+
0
+ it 'remembers me' do
0
+ controller = dispatch_to(Session,:create, :method => :post, :email => @user.email, :password => @user.password, :remember_me => "1")
0
+ controller.cookies["auth_token"].should_not be_nil
0
+ controller.should redirect
0
+ end
0
+
0
+ it 'does not remember me' do
0
+ controller = dispatch_to(Session, :create, :method => :post, :email => @user.email, :password => @user.password, :remember_me => "0")
0
+ controller.cookies["auth_token"].should be_nil
0
+ controller.should redirect
0
+ end
0
+
0
+ it 'logs in with cookie' do
0
+ @user.remember_me
0
+ controller = dispatch_to(Session, :new) do |c|
0
+ c.request.env[Merb::Const::HTTP_COOKIE] = "auth_token=#{@user.remember_token}"
0
+ end
0
+ controller.should be_logged_in
0
+ end
0
     end
0
- controller.cookies["auth_token"].should == nil
0
- controller.should redirect
0
- end
0
-end
0
-
0
-describe "Session Controller", "routes" do
0
 
0
- it "routed to Session#new from '/login'" do
0
- request = request_to("/login")
0
- request[:controller].should == "session"
0
- request[:action].should == "new"
0
- end
0
-
0
- it "routed to Session#create from '/login' via :post" do
0
- request = request_to("/login", :post)
0
- request[:controller].should == "session"
0
- request[:action].should == "create"
0
- end
0
-
0
- it "routed to Session#destroy from '/logout' via :get" do
0
- request = request_to("/logout")
0
- request[:controller].should == "session"
0
- request[:action].should == "destroy"
0
- end
0
-
0
- it "routed to Session#destroy from '/logout' via :delete" do
0
- request = request_to("/logout", :delete)
0
- request[:controller].should == "session"
0
- request[:action].should == "destroy"
0
- end
0
-end
0
+ describe "#logout" do
0
+ it 'logs out' do
0
+ controller = dispatch_to(Session, :destroy) do
0
+ self.stub!(:current_user).and_return(@quentin)
0
+ end
0
+ controller.session[:user].should be_nil
0
+ controller.should redirect
0
+ end
0
 
0
-def auth_token(token)
0
- CGI::Cookie.new('name' => 'auth_token', 'value' => token)
0
-end
0
-
0
-def cookie_for(user)
0
- auth_token user.remember_token
0
+ it 'deletes token on logout' do
0
+ controller = dispatch_to(Session, :destroy) do
0
+ self.stub!(:current_user).and_return(@quentin)
0
+ end
0
+ controller.cookies["auth_token"].should == nil
0
+ controller.should redirect
0
+ end
0
+ end
0
+ end
0
 end
...
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
75
76
77
78
79
80
81
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
...
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
&