From: Jan Provaznik <jprovazn(a)redhat.com>
UserSession model is removed, in tests it's replaced by mocked warden object.
Authentication itself is covered by user model tests, though these tests
don't cover complete Warden auth process, only user's authentication model
which is used by warden - not sure how to test warden auth itself.
---
src/features/authentication.feature | 3 +-
src/features/role.feature | 1 +
src/features/step_definitions/authentication.rb | 13 ++++-------
.../controllers/deployments_controller_spec.rb | 7 ++---
.../hardware_profiles_controller_spec.rb | 3 +-
src/spec/controllers/pools_controller_spec.rb | 12 +++++-----
.../provider_accounts_controller_spec.rb | 22 ++++++++++---------
src/spec/controllers/provider_controller_spec.rb | 3 +-
.../controllers/user_sessions_controller_spec.rb | 13 +++++------
src/spec/controllers/users_controller_spec.rb | 18 ++++++++--------
src/spec/models/user_spec.rb | 17 +++++++++++++++
src/spec/spec_helper.rb | 11 +++++++--
12 files changed, 70 insertions(+), 53 deletions(-)
diff --git a/src/features/authentication.feature b/src/features/authentication.feature
index 902c8c7..1dd3cf8 100644
--- a/src/features/authentication.feature
+++ b/src/features/authentication.feature
@@ -30,8 +30,7 @@ Feature: User authentication
Given I am logged in
And I am on the root page
When I follow "Log out"
- Then I should be logged out
- And I should see "Username:"
+ Then I should see "Username:"
And I should see "Password:"
And I should see "Show my password"
diff --git a/src/features/role.feature b/src/features/role.feature
index abd0157..09ecb49 100644
--- a/src/features/role.feature
+++ b/src/features/role.feature
@@ -6,6 +6,7 @@ Feature: Manage Roles
Background:
Given I am an authorised user
And I am logged in
+ And show me the page
Given there's a list of roles
And a role "Captain" exists
diff --git a/src/features/step_definitions/authentication.rb
b/src/features/step_definitions/authentication.rb
index cb038b1..a8e112a 100644
--- a/src/features/step_definitions/authentication.rb
+++ b/src/features/step_definitions/authentication.rb
@@ -9,9 +9,9 @@ end
def login(login, password)
user
visit path_to("the login page")
- fill_in "user_session[login]", :with => login
- fill_in "user_session[password]", :with => password
- click_button "Login"
+ fill_in "login", :with => login
+ fill_in "password", :with => password
+ click_button "login-btn"
end
def signup
@@ -36,6 +36,7 @@ end
When /^I login as authorised user$/ do
admin_user = @admin_permission.user
login(admin_user.login, admin_user.password)
+ page.should have_content('Login successful!')
end
Given /^I am a new user$/ do
@@ -44,7 +45,7 @@ end
Given /^I am logged in$/ do
login(user.login, user.password)
- UserSession.find.should_not == nil
+ page.should have_content('Login successful!')
end
Given /^there are not any roles$/ do
@@ -64,10 +65,6 @@ When /^I log out$/ do
visit '/logout'
end
-Then /^I should be logged out$/ do
- UserSession.find.should == nil
-end
-
Then /^I should have one private pool named "([^\"]*)"$/ do |login|
Pool.find_by_name(login).should_not be_nil
Pool.find_by_name(login).permissions.size.should == 1
diff --git a/src/spec/controllers/deployments_controller_spec.rb
b/src/spec/controllers/deployments_controller_spec.rb
index 76e7732..df933b0 100644
--- a/src/spec/controllers/deployments_controller_spec.rb
+++ b/src/spec/controllers/deployments_controller_spec.rb
@@ -5,11 +5,10 @@ describe DeploymentsController do
before(:each) do
@admin_permission = FactoryGirl.create(:admin_permission)
@admin = @admin_permission.user
- activate_authlogic
end
it "should allow RESTful delete of a single deployment" do
- UserSession.create(@admin)
+ mock_warden(@admin)
deployment = nil
lambda do
deployment = FactoryGirl.create(:deployment)
@@ -22,7 +21,7 @@ describe DeploymentsController do
end
it "should allow multi destroy of multiple deployments" do
- UserSession.create(@admin)
+ mock_warden(@admin)
deployment1 = nil
deployment2 = nil
lambda do
@@ -39,7 +38,7 @@ describe DeploymentsController do
context "JSON format responses for " do
before do
accept_json
- UserSession.create(@admin)
+ mock_warden(@admin)
end
describe "#create" do
diff --git a/src/spec/controllers/hardware_profiles_controller_spec.rb
b/src/spec/controllers/hardware_profiles_controller_spec.rb
index 099dac7..e02570e 100644
--- a/src/spec/controllers/hardware_profiles_controller_spec.rb
+++ b/src/spec/controllers/hardware_profiles_controller_spec.rb
@@ -6,11 +6,10 @@ describe HardwareProfilesController do
before(:each) do
@admin_permission = FactoryGirl.create :admin_permission
@admin = @admin_permission.user
- activate_authlogic
end
it "should provide ui to view all hardware profiles" do
- UserSession.create(@admin)
+ mock_warden(@admin)
@request.accept = "text/html"
get :index
response.should be_success
diff --git a/src/spec/controllers/pools_controller_spec.rb
b/src/spec/controllers/pools_controller_spec.rb
index 652dd42..bbb7356 100644
--- a/src/spec/controllers/pools_controller_spec.rb
+++ b/src/spec/controllers/pools_controller_spec.rb
@@ -6,23 +6,23 @@ describe PoolsController do
before(:each) do
@admin_permission = FactoryGirl.create :admin_permission
@admin = @admin_permission.user
- activate_authlogic
end
it "should provide ui to create new pool" do
- UserSession.create(@admin)
+ mock_warden(@admin)
get :new
response.should be_success
response.should render_template("new")
end
it "should fail to grant access to new pool ui for unauthenticated user" do
+ mock_warden(nil)
get :new
response.should_not be_success
end
it "should provide means to create new pool" do
- UserSession.create(@admin)
+ mock_warden(@admin)
lambda do
post :create, :pool => {
:name => 'foopool',
@@ -35,7 +35,7 @@ describe PoolsController do
end
it "should allow RESTful delete of a single pool" do
- UserSession.create(@admin)
+ mock_warden(@admin)
lambda do
post :create, :pool => {
:name => 'pool1',
@@ -50,7 +50,7 @@ describe PoolsController do
end
it "should allow RESTful delete of multiple pools" do
- UserSession.create(@admin)
+ mock_warden(@admin)
lambda do
post :create, :pool => {
:name => 'pool1',
@@ -75,7 +75,7 @@ describe PoolsController do
context "JSON format responses for " do
before do
accept_json
- UserSession.create(@admin)
+ mock_warden(@admin)
end
describe "#create" do
diff --git a/src/spec/controllers/provider_accounts_controller_spec.rb
b/src/spec/controllers/provider_accounts_controller_spec.rb
index 60740a3..f0772fe 100644
--- a/src/spec/controllers/provider_accounts_controller_spec.rb
+++ b/src/spec/controllers/provider_accounts_controller_spec.rb
@@ -4,6 +4,7 @@ describe ProviderAccountsController do
fixtures :all
before(:each) do
+ @tuser = FactoryGirl.create :tuser
@provider_account = FactoryGirl.create :mock_provider_account
@provider = @provider_account.provider
@@ -11,18 +12,17 @@ describe ProviderAccountsController do
:permission_object => @provider,
:user =>
FactoryGirl.create(:provider_admin_user)
@admin = @admin_permission.user
- activate_authlogic
end
it "shows provider accounts as list" do
- UserSession.create(@admin)
+ mock_warden(@admin)
get :index, :provider_id => @provider.id
response.should be_success
response.should render_template("index")
end
it "doesn't allow to save provider's account if not valid
credentials" do
- UserSession.create(@admin)
+ mock_warden(@admin)
post :create, :provider_account => {:provider_id => @provider.id}
response.should be_success
response.should render_template("new")
@@ -30,14 +30,14 @@ describe ProviderAccountsController do
end
it "should permit users with account modify permission to access edit cloud
account interface" do
- UserSession.create(@admin)
+ mock_warden(@admin)
get :edit, :id => @provider_account.id
response.should be_success
response.should render_template("edit")
end
it "should allow users with account modify password to update a cloud
account" do
- UserSession.create(@admin)
+ mock_warden(@admin)
@provider_account.credentials_hash = {:username => 'mockuser2', :password
=> "foobar"}
@provider_account.stub!(:valid_credentials?).and_return(true)
@provider_account.quota = Quota.new
@@ -48,7 +48,7 @@ describe ProviderAccountsController do
end
it "should allow users with account modify permission to delete a cloud
account" do
- UserSession.create(@admin)
+ mock_warden(@admin)
lambda do
post :multi_destroy, :accounts_selected => [@provider_account.id]
end.should change(ProviderAccount, :count).by(-1)
@@ -57,24 +57,26 @@ describe ProviderAccountsController do
end
it "should deny access to users without account modify permission" do
+ mock_warden(@tuser)
get :edit, :id => @provider_account.id
- response.should_not be_success
+ response.should render_template('layouts/error')
post :update, :id => @provider_account.id, :provider_account => { :password
=> 'foobar' }
- response.should_not be_success
+ response.should render_template('layouts/error')
post :destroy, :id => @provider_account.id
- response.should_not be_success
+ response.should render_template('layouts/error')
end
it "should provide ui to create new account" do
- UserSession.create(@admin)
+ mock_warden(@admin)
get :new, :provider_id => @provider.id
response.should be_success
response.should render_template("new")
end
it "should fail to grant access to account UIs for unauthenticated user" do
+ mock_warden(nil)
get :new
response.should_not be_success
end
diff --git a/src/spec/controllers/provider_controller_spec.rb
b/src/spec/controllers/provider_controller_spec.rb
index 64fad39..8e31f03 100644
--- a/src/spec/controllers/provider_controller_spec.rb
+++ b/src/spec/controllers/provider_controller_spec.rb
@@ -7,8 +7,7 @@ describe ProvidersController do
@admin_permission = FactoryGirl.create :provider_admin_permission
@provider = @admin_permission.permission_object
@admin = @admin_permission.user
- activate_authlogic
- UserSession.create(@admin)
+ mock_warden(@admin)
end
describe "provide ui to view hardware profiles" do
diff --git a/src/spec/controllers/user_sessions_controller_spec.rb
b/src/spec/controllers/user_sessions_controller_spec.rb
index 64e6eee..6ae46e5 100644
--- a/src/spec/controllers/user_sessions_controller_spec.rb
+++ b/src/spec/controllers/user_sessions_controller_spec.rb
@@ -1,32 +1,31 @@
require 'spec_helper'
+include Warden::Test::Helpers
describe UserSessionsController do
fixtures :all
before(:each) do
@tuser = FactoryGirl.create :tuser
- activate_authlogic
+ end
+ after(:each) do
+ Warden.test_reset!
end
it "should call new method" do
{:get => 'login'}.should route_to(:controller =>
'user_sessions', :action => 'new')
get :new
- current_user.should == nil
- UserSession.find.should == nil
response.should be_success
end
it "should create user session" do
+ mock_warden(nil)
post :create, :user_session => { :login => @tuser.login, :password =>
"secret" }
- UserSession.find.should_not == nil
- @tuser.should == UserSession.find.user
response.should redirect_to(root_url)
end
it "should destroy user session" do
- post :create, :user_session => { :login => @tuser.login, :password =>
"secret" }
+ mock_warden(@tuser)
delete :destroy
- UserSession.find.should == nil
response.should redirect_to(login_path)
end
end
diff --git a/src/spec/controllers/users_controller_spec.rb
b/src/spec/controllers/users_controller_spec.rb
index a5c1cf7..e2253cc 100644
--- a/src/spec/controllers/users_controller_spec.rb
+++ b/src/spec/controllers/users_controller_spec.rb
@@ -7,7 +7,6 @@ describe UsersController do
@tuser = FactoryGirl.create :tuser
@admin_permission = FactoryGirl.create :admin_permission
@admin = @admin_permission.user
- activate_authlogic
end
it "allows user to get to registration form for new user" do
@@ -18,6 +17,7 @@ describe UsersController do
describe "#create" do
context "user enters valid input" do
it "creates user" do
+ mock_warden(@admin)
lambda do
post :create, :user => {
:login => "tuser2", :email =>
"tuser2(a)example.com",
@@ -25,20 +25,20 @@ describe UsersController do
:password_confirmation => "testpass" }
end.should change(User, :count).by(1)
- response.should redirect_to(root_path)
+ response.should redirect_to(users_path)
end
it "fails to create pool" do
+ mock_warden(@admin)
lambda do
post :create, :user => {}
end.should_not change(User, :count)
returned_user = assigns[:user]
returned_user.errors.empty?.should be_false
- returned_user.should have(2).errors_on(:login)
+ returned_user.should have(1).errors_on(:login)
returned_user.should have(1).errors_on(:email)
returned_user.should have(1).error_on(:password)
- returned_user.should have(1).error_on(:password_confirmation)
response.should render_template('new')
end
@@ -46,7 +46,7 @@ describe UsersController do
end
it "allows an admin to create user" do
- UserSession.create(@admin)
+ mock_warden(@admin)
lambda do
post :create, :user => {
:login => "tuser3", :email => "tuser3(a)example.com",
@@ -58,7 +58,7 @@ describe UsersController do
end
it "should not allow a regular user to create user" do
- UserSession.create(@tuser)
+ mock_warden(@tuser)
lambda do
post :create, :user => {
:login => "tuser4", :email => "tuser4(a)example.com",
@@ -68,21 +68,21 @@ describe UsersController do
end
it "provides show view for user" do
- UserSession.create(@tuser)
+ mock_warden(@tuser)
get :show
response.should be_success
end
it "provides edit view for user" do
- UserSession.create(@tuser)
+ mock_warden(@tuser)
get :edit, :id => @tuser.id
response.should be_success
end
it "updates user with new data" do
- UserSession.create(@tuser)
+ mock_warden(@tuser)
put :update, :id => @tuser.id, :user => {}, :commit => 'Save'
response.should redirect_to(user_path(@tuser))
diff --git a/src/spec/models/user_spec.rb b/src/spec/models/user_spec.rb
index 34e0a6c..323e966 100644
--- a/src/spec/models/user_spec.rb
+++ b/src/spec/models/user_spec.rb
@@ -67,4 +67,21 @@ describe User do
user.should_not be_valid
end
+ it "should encrypt password when a user is saved" do
+ user = FactoryGirl.build :tuser
+ user.crypted_password.should be_nil
+ user.save!
+ user.crypted_password.should_not be_nil
+ end
+
+
+ it "should authenticate a user with valid password" do
+ user = FactoryGirl.create :tuser
+ User.authenticate(user.login, user.password).should_not be_nil
+ end
+
+ it "should not authenticate a user with valid password" do
+ user = FactoryGirl.create :tuser
+ User.authenticate(user.login, 'invalid').should be_nil
+ end
end
diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb
index 641a844..07aea3c 100644
--- a/src/spec/spec_helper.rb
+++ b/src/spec/spec_helper.rb
@@ -2,7 +2,6 @@
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
-require 'authlogic/test_case'
require 'timecop'
require 'vcr_setup'
@@ -21,8 +20,14 @@ include RequestContentTypeHelper
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
+def mock_warden(user)
+ request.env['warden'] = mock(Warden, :authenticate => user,
+ :authenticate! => user,
+ :user => user,
+ :raw_session => nil)
+end
+
RSpec.configure do |config|
- include Authlogic::TestCase
config.use_transactional_fixtures = true
config.use_instantiated_fixtures = false
config.fixture_path = Rails.root.join("spec/fixtures")
@@ -47,4 +52,4 @@ RSpec.configure do |config|
config.after(:each, :type => :controller) do
#current_user_session.destroy
end
-end
\ No newline at end of file
+end
--
1.7.6