master
1require "rails_helper"
2
3describe SessionsController do
4 describe "#new" do
5 context "when not logged in" do
6 it "loads the login page" do
7 get :new
8 expect(response).to be_success
9 expect(assigns(:session)).to be_new_record
10 end
11 end
12
13 context "when already logged in" do
14 let(:user) { build(:user) }
15
16 before { http_login(user) }
17
18 it "redirects to the dashboard" do
19 get :new
20 expect(response).to redirect_to(my_dashboard_path)
21 end
22 end
23 end
24
25 describe "#create" do
26 context "when the email and password is correct" do
27 let(:user_session) { build(:user_session, id: SecureRandom.uuid) }
28 let(:email) { "joe" }
29 let(:password) { "password" }
30
31 before :each do
32 allow(User).to receive(:login).with(email, password).and_return(user_session)
33 post :create, params: { session: { email: email, password: password } }
34 end
35
36 it "returns a valid session" do
37 expect(session[:raphael]).to eql(user_session.key)
38 end
39
40 it "redirects to the dashboard" do
41 expect(response).to redirect_to(my_dashboard_path)
42 end
43 end
44
45 context "when the email is not known" do
46 before :each do
47 allow(User).to receive(:login).and_return(nil)
48 end
49
50 it "returns an error" do
51 post :create, params: { session: { email: 'x', password: 'y' } }
52 expect(response).to redirect_to(login_path)
53 expect(flash[:error]).to_not be_empty
54 end
55 end
56 end
57
58 describe "#destroy" do
59 let(:user_session) { create(:user_session) }
60
61 before :each do
62 session[:raphael] = user_session.key
63 allow(controller).to receive(:user_session).and_return(user_session)
64 delete :destroy, params: { id: "me" }
65 end
66
67 it { expect(session[:raphael]).to be_nil }
68
69 it { expect(user_session.reload.revoked_at).to_not be_nil }
70
71 it { expect(response).to redirect_to(root_path) }
72 end
73end