From 742ea1bd2e8d619fa4b4f3bfb0b7170597d4a354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Thu, 1 Oct 2015 17:53:15 +0200 Subject: [PATCH] adds management/sessions controller --- .../management/sessions_controller.rb | 17 +++++++++++ app/models/manager.rb | 4 +-- config/routes.rb | 3 ++ .../management/sessions_controller_spec.rb | 28 +++++++++++++++++++ spec/models/manager_spec.rb | 12 ++++---- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 app/controllers/management/sessions_controller.rb create mode 100644 spec/controllers/management/sessions_controller_spec.rb diff --git a/app/controllers/management/sessions_controller.rb b/app/controllers/management/sessions_controller.rb new file mode 100644 index 000000000..47aa3508f --- /dev/null +++ b/app/controllers/management/sessions_controller.rb @@ -0,0 +1,17 @@ +class Management::SessionsController < ActionController::Base + + def create + destroy_session + if manager = Manager.valid_manager(params[:login], params[:clave_usuario]) + session["manager_id"] = manager.id + redirect_to management_root_path + else + raise ActionController::RoutingError.new('Not Found') + end + end + + private + def destroy_session + session["manager_id"] = nil + end +end \ No newline at end of file diff --git a/app/models/manager.rb b/app/models/manager.rb index 1cfc3e545..6dc5cceea 100644 --- a/app/models/manager.rb +++ b/app/models/manager.rb @@ -4,9 +4,9 @@ class Manager < ActiveRecord::Base has_secure_password - def self.valid_auth?(username = nil, password = nil) + def self.valid_manager(username = nil, password = nil) return false unless username.present? && password.present? - Manager.find_by(username: username).try(:authenticate, password).present? + Manager.find_by(username: username).try(:authenticate, password) end end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 11b69dc4b..391bc5415 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -166,6 +166,9 @@ Rails.application.routes.draw do namespace :management do root to: "dashboard#index" + get 'sign_in', to: 'sessions#create' + + resources :sessions, only: :create end # Example of regular route: diff --git a/spec/controllers/management/sessions_controller_spec.rb b/spec/controllers/management/sessions_controller_spec.rb new file mode 100644 index 000000000..e895849a7 --- /dev/null +++ b/spec/controllers/management/sessions_controller_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +describe Management::SessionsController do + + before(:all) do + create(:manager, username: "supermanager" , password: "secret") + end + + describe 'Sign up' do + it "should return 404 if not username/password" do + expect { get :create }.to raise_error "Not Found" + end + + it "should return 404 if wrong username" do + expect { get :create, login: "nonexistent" , clave_usuario: "secret" }.to raise_error "Not Found" + end + + it "should return 404 if wrong password" do + expect { get :create, login: "supermanager" , clave_usuario: "wrong" }.to raise_error "Not Found" + end + + it "should redirect to management root path if right credentials" do + get :create, login: "supermanager" , clave_usuario: "secret" + expect(response).to be_redirect + end + end + +end \ No newline at end of file diff --git a/spec/models/manager_spec.rb b/spec/models/manager_spec.rb index 8e08e1224..a6a89427c 100644 --- a/spec/models/manager_spec.rb +++ b/spec/models/manager_spec.rb @@ -20,26 +20,26 @@ describe Manager do end end - describe "self.valid_auth?" do + describe "self.valid_manager" do before(:all) { create(:manager, username: "Silvia" ,password: "supersecret") } it "is false when username is blank" do - expect(Manager.valid_auth?(nil, "supersecret")).to be false + expect(Manager.valid_manager(nil, "supersecret")).to be_blank end it "is false when password is blank" do - expect(Manager.valid_auth?("Silvia", nil)).to be false + expect(Manager.valid_manager("Silvia", nil)).to be_blank end it "is false if manager unexistent" do - expect(Manager.valid_auth?("Manager", "supersecret")).to be false + expect(Manager.valid_manager("Manager", "supersecret")).to be_blank end it "is false if wrong password unexistent" do - expect(Manager.valid_auth?("Silvia", "wrong")).to be false + expect(Manager.valid_manager("Silvia", "wrong")).to be_blank end it "is true if right username/password combination" do - expect(Manager.valid_auth?("Silvia", "supersecret")).to be true + expect(Manager.valid_manager("Silvia", "supersecret")).to be_present end end