Create note on discontinued development
[merb_mart.git] / spec / controllers / sessions_spec.rb
blob10d52bc7d98d325f183aa4928754a67687a8e0ec
1 require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2 require File.join( File.dirname(__FILE__), "..", "user_spec_helper")
3 require File.join( File.dirname(__FILE__), "..", "authenticated_system_spec_helper")
4 require 'cgi'
6 describe "Sessions Controller", "index action" do
7   include UserSpecHelper
9   before(:each) do
10     User.clear_database_table
11     @quentin = User.create(valid_user_hash.with(:login => "quentin", :password => "test", :password_confirmation => "test"))
12     @controller = Sessions.new(fake_request)
13     @quentin.activate
14   end
16   it "should have a route to Sessions#new from '/login'" do
17     request_to("/login") do |params|
18       params[:controller].should == "Sessions"
19       params[:action].should == "create"
20     end
21   end
23   it "should route to Sessions#create from '/login' via post" do
24     request_to("/login", :post) do |params|
25       params[:controller].should  == "Sessions"
26       params[:action].should      == "create"
27     end
28   end
30   it "should have a named route :login" do
31     @controller.url(:login).should == "/login"
32   end
34   it "should have route to Sessions#destroy from '/logout' via delete" do
35     request_to("/logout", :delete) do |params|
36       params[:controller].should == "Sessions"
37       params[:action].should    == "destroy"
38     end
39   end
41   it "should route to Sessions#destroy from '/logout' via get" do
42     request_to("/logout") do |params|
43       params[:controller].should == "Sessions"
44       params[:action].should     == "destroy"
45     end
46   end
48   it 'logins and redirects' do
49     controller = post "/login", :login => 'quentin', :password => 'test'
50     controller.session[:user].should_not be_nil
51     controller.session[:user].should == @quentin.id
52     controller.should redirect_to("/")
53   end
55   it 'fails login and does not redirect' do
56     controller = post "/login", :login => 'quentin', :password => 'bad password'
57     controller.session[:user].should be_nil
58     controller.should be_successful
59   end
61   it 'logs out' do
62     controller = get("/logout"){|controller| controller.stub!(:current_user).and_return(@quentin) }
63     controller.session[:user].should be_nil
64     controller.should redirect
65   end
67   it 'remembers me' do
68     controller = post "/login", :login => 'quentin', :password => 'test', :remember_me => "1"
69     controller.cookies["auth_token"].should_not be_nil
70   end
72   it 'does not remember me' do
73     controller = post "/login", :login => 'quentin', :password => 'test', :remember_me => "0"
74     controller.cookies["auth_token"].should be_nil
75   end
77   it 'deletes token on logout' do
78     controller = get("/logout") {|request| request.stub!(:current_user).and_return(@quentin) }
79     controller.cookies["auth_token"].should == nil
80   end
83   it 'logs in with cookie' do
84     @quentin.remember_me
85     controller = get "/login" do |c|
86       c.request.env[Merb::Const::HTTP_COOKIE] = "auth_token=#{@quentin.remember_token}"
87     end
88     controller.should be_logged_in
89   end
91   def auth_token(token)
92     CGI::Cookie.new('name' => 'auth_token', 'value' => token)
93   end
95   def cookie_for(user)
96     auth_token user.remember_token
97   end
98 end