master
1require "rails_helper"
2
3describe SessionsController do
4 describe "#new" do
5 context "when already logged in" do
6 let(:user) { create(:user) }
7
8 it 'redirects to the dashboard' do
9 http_login(user)
10 get :new
11 expect(response).to redirect_to(dashboard_path)
12 end
13 end
14
15 it 'loads a new user' do
16 get :new
17 expect(assigns(:user)).to be_new_record
18 end
19 end
20
21 describe "#create" do
22 let(:user) { create(:user, password: "password") }
23
24 context "when credentials are correct" do
25 it "logs you in with email" do
26 post :create, params: {
27 user: { username: user.email, password: "password" }
28 }
29 expect(session[:user_id]).to eql(UserSession.last.id)
30 end
31
32 it "logs you in with username" do
33 post :create, params: {
34 user: { username: user.username, password: "password" }
35 }
36 expect(session[:user_id]).to eql(UserSession.last.id)
37 end
38
39 it "redirects to the dashboard" do
40 post :create, params: {
41 user: { username: user.username, password: "password" }
42 }
43 expect(response).to redirect_to(dashboard_path)
44 end
45 end
46
47 context "when credentials are incorrect" do
48 it "displays errors" do
49 post :create, params: {
50 user: { username: user.username, password: "wrong" }
51 }
52 expect(flash[:warning]).to_not be_empty
53 end
54
55 it "redirects to the login page" do
56 post :create, params: {
57 user: { username: user.username, password: "wrong" }
58 }
59 expect(response).to redirect_to(new_session_path)
60 end
61 end
62 end
63
64 describe "#destroy" do
65 context "when logged in" do
66 let(:user) { create(:user) }
67 let(:user_session) { create(:active_session, user: user) }
68
69 it "logs you out" do
70 session[:user_id] = user_session.id
71
72 delete :destroy, params: { id: user.id }
73
74 expect(session[:user_id]).to be_nil
75 expect(user_session.reload.revoked_at).to be_present
76 end
77 end
78 end
79end