Commit e39a368

Stephen Peasley <s@stephenpeasley.com>
2015-01-27 03:37:16
Add Capybara tests for authentication
1 parent fc639e3
Changed files (4)
app/controllers/sessions_controller.rb
@@ -3,12 +3,12 @@ class SessionsController < ApplicationController
   layout "public"
   
   def create
-    user = User.authenticate(params[:username], params[:password])
+    user = User.authenticate(params[:user][:username], params[:user][:password])
     if user.present?
       session[:user_id] = user.id
-      render :nothing => true
+      redirect_to dashboard_path
     else
-      flash[:warning] = t(".invalid_login")
+      flash[:warning] = t("sessions.create.invalid_login")
       redirect_to new_session_path
     end
   end
spec/controllers/sessions_controller_spec.rb
@@ -9,12 +9,12 @@ describe SessionsController do
     context "when credentials are correct" do
       
       it "logs you in with email" do
-        post :create, { username: user.email, password: "password" }
+        post :create, { user: { username: user.email, password: "password" } }
         expect(session[:user_id]).to eql(user.id)
       end
       
       it "logs you in with username" do
-        post :create, { username: user.username, password: "password" }
+        post :create, { user: { username: user.username, password: "password" } }
         expect(session[:user_id]).to eql(user.id)
       end
       
@@ -23,12 +23,12 @@ describe SessionsController do
     context "when credentials are incorrect" do
       
       it "displays errors" do
-        post :create, { username: user.username, password: "wrong" }
+        post :create, { user: { username: user.username, password: "wrong" } }
         expect(flash[:warning]).to_not be_empty
       end
       
       it "redirects to the login page" do
-        post :create, { username: user.username, password: "wrong" }
+        post :create, { user: { username: user.username, password: "wrong" } }
         expect(response).to redirect_to(new_session_path)
       end
       
spec/features/sessions_spec.rb
@@ -0,0 +1,13 @@
+require "rails_helper"
+
+describe "Sessions" do
+  subject { LoginPage.new }
+  let(:user){ create(:user,:password => "password") }
+  context "credentials are correct" do
+    it "takes you to your dashboard" do
+      subject.visit_page
+      subject.login_with(user.username, "password")
+      expect(current_path).to eql(dashboard_path)
+    end
+  end
+end
\ No newline at end of file
spec/support/pages/login_page.rb
@@ -0,0 +1,17 @@
+require_relative "../page_model.rb"
+
+class LoginPage < PageModel
+  
+  def initialize
+    super new_session_path
+  end
+  
+  def login_with(username, password)
+    within("#new_user") do
+      fill_in I18n.translate("sessions.new.username"), :with => username
+      fill_in I18n.translate("sessions.new.password"), :with => password
+      click_button I18n.translate("sessions.new.login_button")
+    end
+  end
+  
+end
\ No newline at end of file