wristband 0.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -1
- data/Gemfile.lock +3 -3
- data/README.md +121 -38
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/app/controllers/application_controller.rb +0 -6
- data/app/controllers/passwords_controller.rb +43 -0
- data/app/controllers/sessions_controller.rb +6 -7
- data/app/controllers/users_controller.rb +1 -26
- data/app/helpers/form_helper.rb +8 -0
- data/app/mailers/user_mailer.rb +4 -26
- data/app/models/user.rb +1 -2
- data/app/views/passwords/edit.html.haml +7 -0
- data/app/views/passwords/new.html.haml +15 -0
- data/app/views/sessions/new.html.haml +1 -5
- data/app/views/user_mailer/password_reset.html.haml +7 -0
- data/app/views/user_mailer/password_reset.text.haml +6 -0
- data/config/environment.rb +1 -0
- data/config/initializers/formatted_form_builder.rb +141 -0
- data/config/routes.rb +6 -9
- data/db/migrate/01_create_users_table.rb +5 -3
- data/db/schema.rb +7 -4
- data/lib/generators/wristband/wristband_generator.rb +26 -15
- data/lib/wristband/application_extensions.rb +1 -0
- data/lib/wristband/user_extensions.rb +7 -17
- data/lib/wristband.rb +1 -3
- data/test/dummy/user.rb +1 -1
- data/test/functional/passwords_controller_test.rb +62 -0
- data/test/functional/sessions_controller_test.rb +93 -0
- data/test/test_helper.rb +1 -5
- data/test/unit/has_authorities_test.rb +1 -8
- data/test/unit/session_user_test.rb +46 -4
- data/test/unit/user_mailer_test.rb +18 -0
- data/test/unit/user_test.rb +1 -72
- data/test/unit/wristband_test.rb +74 -0
- data/wristband.gemspec +27 -10
- metadata +62 -29
- data/app/views/user_mailer/email_verification.text.html.rhtml +0 -7
- data/app/views/user_mailer/email_verification.text.plain.rhtml +0 -9
- data/app/views/user_mailer/forgot_password.text.html.rhtml +0 -10
- data/app/views/user_mailer/forgot_password.text.plain.rhtml +0 -10
@@ -2,10 +2,9 @@ class CreateUsersTable < ActiveRecord::Migration
|
|
2
2
|
def self.up
|
3
3
|
create_table :users do |t|
|
4
4
|
t.string :email
|
5
|
-
t.string :
|
6
|
-
t.datetime :validated_at
|
7
|
-
t.string :password_crypt, :limit => 40
|
5
|
+
t.string :password_hash, :limit => 40
|
8
6
|
t.string :password_salt, :limit => 40
|
7
|
+
t.string :perishable_token
|
9
8
|
t.string :remember_token
|
10
9
|
t.string :role
|
11
10
|
t.timestamps
|
@@ -18,6 +17,9 @@ class CreateUsersTable < ActiveRecord::Migration
|
|
18
17
|
# t.string :zip
|
19
18
|
# t.string :ip
|
20
19
|
end
|
20
|
+
add_index :users, :email
|
21
|
+
add_index :users, :perishable_token
|
22
|
+
add_index :users, :remember_token
|
21
23
|
end
|
22
24
|
|
23
25
|
def self.down
|
data/db/schema.rb
CHANGED
@@ -14,14 +14,17 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
14
14
|
|
15
15
|
create_table "users", :force => true do |t|
|
16
16
|
t.string "email"
|
17
|
-
t.string "
|
18
|
-
t.
|
19
|
-
t.string "
|
20
|
-
t.string "password_salt", :limit => 40
|
17
|
+
t.string "password_hash", :limit => 40
|
18
|
+
t.string "password_salt", :limit => 40
|
19
|
+
t.string "perishable_token"
|
21
20
|
t.string "remember_token"
|
22
21
|
t.string "role"
|
23
22
|
t.datetime "created_at"
|
24
23
|
t.datetime "updated_at"
|
25
24
|
end
|
26
25
|
|
26
|
+
add_index "users", ["email"], :name => "index_users_on_email"
|
27
|
+
add_index "users", ["perishable_token"], :name => "index_users_on_perishable_token"
|
28
|
+
add_index "users", ["remember_token"], :name => "index_users_on_remember_token"
|
29
|
+
|
27
30
|
end
|
@@ -4,29 +4,50 @@ class WristbandGenerator < Rails::Generators::Base
|
|
4
4
|
source_root File.expand_path('../../../..', __FILE__)
|
5
5
|
|
6
6
|
def generate_models
|
7
|
+
puts "\t== Models =="
|
7
8
|
copy_file 'app/models/user.rb', 'app/models/user.rb'
|
8
9
|
copy_file 'app/models/session_user.rb', 'app/models/session_user.rb'
|
9
10
|
end
|
10
11
|
|
11
12
|
def generate_controllers
|
13
|
+
puts "\t== Controllers =="
|
12
14
|
copy_file 'app/controllers/users_controller.rb', 'app/controllers/users_controller.rb'
|
13
15
|
copy_file 'app/controllers/sessions_controller.rb', 'app/controllers/sessions_controller.rb'
|
16
|
+
copy_file 'app/controllers/passwords_controller.rb', 'app/controllers/passwords_controller.rb'
|
14
17
|
end
|
15
18
|
|
16
19
|
def generate_views
|
20
|
+
puts "\t== Views =="
|
17
21
|
copy_file 'app/views/users/show.html.haml', 'app/views/users/show.html.haml'
|
18
22
|
copy_file 'app/views/sessions/new.html.haml', 'app/views/sessions/new.html.haml'
|
19
|
-
|
23
|
+
copy_file 'app/views/passwords/new.html.haml', 'app/views/passwords/new.html.haml'
|
24
|
+
copy_file 'app/views/passwords/edit.html.haml', 'app/views/passwords/edit.html.haml'
|
20
25
|
end
|
26
|
+
|
21
27
|
def generate_user_mailer
|
28
|
+
puts "\t== User Mailer =="
|
22
29
|
copy_file 'app/mailers/user_mailer.rb', 'app/mailers/user_mailer.rb'
|
23
|
-
copy_file
|
24
|
-
copy_file 'app/views/user_mailer/
|
25
|
-
copy_file 'app/views/user_mailer/email_verification.text.html.rhtml', 'app/views/user_mailer/email_verification.text.html.rhtml'
|
26
|
-
copy_file 'app/views/user_mailer/email_verification.text.plain.rhtml', 'app/views/user_mailer/email_verification.text.plain.rhtml'
|
30
|
+
copy_file'app/views/user_mailer/password_reset.html.haml', 'app/views/user_mailer/password_reset.html.haml'
|
31
|
+
copy_file 'app/views/user_mailer/password_reset.text.haml', 'app/views/user_mailer/password_reset.text.haml'
|
27
32
|
end
|
28
33
|
|
34
|
+
def generate_tests
|
35
|
+
puts "\t== Test helper and Dummies =="
|
36
|
+
copy_file 'test/test_helper.rb', 'test/test_helper.rb'
|
37
|
+
copy_file 'test/dummy/user.rb', 'test/dummy/user.rb'
|
38
|
+
|
39
|
+
puts "\t== Unit tests =="
|
40
|
+
copy_file 'test/unit/user_test.rb', 'test/unit/user_test.rb'
|
41
|
+
copy_file 'test/unit/session_user_test.rb', 'test/unit/session_user_test.rb'
|
42
|
+
copy_file 'test/unit/user_mailer_test.rb', 'test/unit/user_mailer_test.rb'
|
43
|
+
|
44
|
+
puts "\t== Functional tests =="
|
45
|
+
copy_file 'test/functional/sessions_controller_test.rb', 'test/functional/sessions_controller_test.rb'
|
46
|
+
copy_file 'test/functional/passwords_controller_test.rb', 'test/functional/passwords_controller_test.rb'
|
47
|
+
end
|
48
|
+
|
29
49
|
def generate_migration
|
50
|
+
puts "\t== Migration =="
|
30
51
|
destination = File.expand_path('db/migrate/01_create_users_table.rb', self.destination_root)
|
31
52
|
migration_dir = File.dirname(destination)
|
32
53
|
destination = self.class.migration_exists?(migration_dir, 'create_users_table')
|
@@ -43,14 +64,4 @@ class WristbandGenerator < Rails::Generators::Base
|
|
43
64
|
require "rails/generators/#{orm}"
|
44
65
|
"#{orm.to_s.camelize}::Generators::Base".constantize.next_migration_number(dirname)
|
45
66
|
end
|
46
|
-
|
47
|
-
# def generate_routes
|
48
|
-
# route "get '/login', :to => 'sessions#new'"
|
49
|
-
# route "post '/login', :to => 'sessions#create'"
|
50
|
-
# route "get '/logout', :to => 'sessions#destroy'"
|
51
|
-
# route "match '/forgot_password', :to => 'users#forgot_password'"
|
52
|
-
# route "resources :users"
|
53
|
-
# route "match '/register', :to => 'users#new'"
|
54
|
-
# end
|
55
|
-
|
56
67
|
end
|
@@ -28,16 +28,7 @@ module Wristband
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
def verify_email!(email_validation_key)
|
33
|
-
if user = find_by_email_validation_key(email_validation_key)
|
34
|
-
user.update_attribute(:validated_at, Time.now.to_s(:db))
|
35
|
-
user
|
36
|
-
else
|
37
|
-
raise UserVerificationError, 'We were not able to verify your account or it may have been verified already. Please contact us for assistance.'.t
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
31
|
+
|
41
32
|
def roles_for_select
|
42
33
|
self.class.wristband[:roles].collect{ |k| [ k.to_s.titleize, k.to_s] }
|
43
34
|
end
|
@@ -72,16 +63,15 @@ module Wristband
|
|
72
63
|
self.send(self.class.wristband[:password_column]) == Wristband::Support.encrypt_with_salt(string, self.password_salt)
|
73
64
|
end
|
74
65
|
|
75
|
-
def
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
def password_crypt=(value)
|
80
|
-
if (value != read_attribute(:password_crypt))
|
66
|
+
def password_hash=(value)
|
67
|
+
if (value != read_attribute(:password_hash))
|
81
68
|
initialize_token
|
82
69
|
end
|
70
|
+
write_attribute(:password_hash, value)
|
71
|
+
end
|
83
72
|
|
84
|
-
|
73
|
+
def reset_perishable_token!
|
74
|
+
update_attribute(:perishable_token, Wristband::Support.random_salt.gsub(/[^A-Za-z0-9]/,''))
|
85
75
|
end
|
86
76
|
|
87
77
|
end
|
data/lib/wristband.rb
CHANGED
@@ -26,7 +26,7 @@ module Wristband
|
|
26
26
|
class_eval do
|
27
27
|
include Wristband::UserExtensions
|
28
28
|
|
29
|
-
options[:password_column] ||= :
|
29
|
+
options[:password_column] ||= :password_hash
|
30
30
|
|
31
31
|
# These two are used on the login form
|
32
32
|
attr_accessor :password
|
@@ -82,5 +82,3 @@ end
|
|
82
82
|
|
83
83
|
ActiveRecord::Base.send(:extend, Wristband::ClassMethods)
|
84
84
|
ActionController::Base.send(:include, Wristband::ApplicationExtensions)
|
85
|
-
|
86
|
-
class UserVerificationError < StandardError; end
|
data/test/dummy/user.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PasswordsControllerTest < ActionController::TestCase
|
4
|
+
def test_new
|
5
|
+
get :new
|
6
|
+
assert_response :success
|
7
|
+
assert_template 'new'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_create
|
11
|
+
user = a User
|
12
|
+
assert_created user
|
13
|
+
assert_difference 'ActionMailer::Base.deliveries.size', 1 do
|
14
|
+
post :create, :email => user.email
|
15
|
+
assert_equal 'Email to reset password successfully sent.', flash[:notice]
|
16
|
+
assert_redirected_to login_path
|
17
|
+
user.reload
|
18
|
+
assert_not_nil user.perishable_token
|
19
|
+
end
|
20
|
+
response = ActionMailer::Base.deliveries.last
|
21
|
+
assert_equal 2, response.parts.length
|
22
|
+
response.parts.each do |part|
|
23
|
+
assert_match /#{user.perishable_token}/, part.body.to_s
|
24
|
+
end
|
25
|
+
assert_equal user.email, response.to[0]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_edit
|
29
|
+
user = a User
|
30
|
+
user.reset_perishable_token!
|
31
|
+
get :edit, :id => user.perishable_token
|
32
|
+
assert_response :success
|
33
|
+
assert_template 'edit'
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_edit_redirects_on_invalid_perishable_token
|
37
|
+
user = a User
|
38
|
+
user.reset_perishable_token!
|
39
|
+
get :edit, :id => user.perishable_token + 'bogus'
|
40
|
+
assert_redirected_to login_path
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_update
|
44
|
+
user = a User
|
45
|
+
user.reset_perishable_token!
|
46
|
+
assert !user.password_match?('newpassword')
|
47
|
+
put :update, :id => user.perishable_token, :user => {:password => 'newpassword', :password_confirmation => 'newpassword'}
|
48
|
+
assert_redirected_to user_path(user)
|
49
|
+
user.reload
|
50
|
+
assert_nil user.perishable_token
|
51
|
+
assert user.password_match?('newpassword')
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_update_redirects_on_invalid_perishable_token
|
55
|
+
user = a User
|
56
|
+
user.reset_perishable_token!
|
57
|
+
put :update, :id => user.perishable_token + 'bogus', :user => {:password => 'newpassword', :password_confirmation => 'newpassword'}
|
58
|
+
assert_redirected_to login_path
|
59
|
+
user.reload
|
60
|
+
assert_not_nil user.perishable_token
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SessionsControllerTest < ActionController::TestCase
|
4
|
+
def setup
|
5
|
+
@regular_user = a User
|
6
|
+
@regular_user.update_attribute(:role, 'regular_user')
|
7
|
+
assert_created @regular_user
|
8
|
+
|
9
|
+
assert !@regular_user.is_admin?
|
10
|
+
end
|
11
|
+
|
12
|
+
# >> Login -----------------------------------------------------------
|
13
|
+
|
14
|
+
def test_get_new
|
15
|
+
get :new
|
16
|
+
assert_response :success
|
17
|
+
assert_template 'new'
|
18
|
+
assert !@controller.logged_in?
|
19
|
+
assert_nil @controller.current_user
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_login_with_email_and_redirect
|
23
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password }
|
24
|
+
assert_equal "Welcome, you are now logged in.", flash[:notice]
|
25
|
+
assert_equal session[:user_id], @regular_user.id
|
26
|
+
assert_redirected_to user_path(@regular_user)
|
27
|
+
assert @controller.logged_in?
|
28
|
+
assert_equal @controller.current_user, @regular_user
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_login_errors
|
32
|
+
post :create, :session_user => { :email => 'a', :password => 'b' }
|
33
|
+
assert_equal "Login failed. Did you mistype?", flash[:alert]
|
34
|
+
assert_nil session[:user]
|
35
|
+
assert_response :success
|
36
|
+
assert_template 'new'
|
37
|
+
assert !@controller.logged_in?
|
38
|
+
assert_nil @controller.current_user
|
39
|
+
|
40
|
+
assert !assigns(:session_user).valid?
|
41
|
+
assert_errors_on assigns(:session_user), :email, :password
|
42
|
+
assert assigns(:session_user).errors[:email].include?("The email address you entered is not valid")
|
43
|
+
assert assigns(:session_user).errors[:email].include?("The email address you entered is to short")
|
44
|
+
assert assigns(:session_user).errors[:password].include?("The password you entered is too short (minimum is 4 characters)")
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_new_redirects_if_logged_in
|
48
|
+
login_as(@regular_user)
|
49
|
+
assert_equal session[:user_id], @regular_user.id
|
50
|
+
assert @controller.logged_in?
|
51
|
+
assert_equal @controller.current_user, @regular_user
|
52
|
+
|
53
|
+
get :new
|
54
|
+
assert_redirected_to user_path(@regular_user)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_create_redirects_if_logged_in
|
58
|
+
login_as(@regular_user)
|
59
|
+
assert_equal session[:user_id], @regular_user.id
|
60
|
+
assert @controller.logged_in?
|
61
|
+
assert_equal @controller.current_user, @regular_user
|
62
|
+
|
63
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password }
|
64
|
+
assert_redirected_to user_path(@regular_user)
|
65
|
+
end
|
66
|
+
|
67
|
+
# >> Logout -----------------------------------------------------------
|
68
|
+
|
69
|
+
def test_should_logout
|
70
|
+
login_as(@regular_user)
|
71
|
+
assert_equal session[:user_id], @regular_user.id
|
72
|
+
assert @controller.logged_in?
|
73
|
+
assert_equal @controller.current_user, @regular_user
|
74
|
+
|
75
|
+
get :destroy
|
76
|
+
assert_redirected_to login_path
|
77
|
+
assert_nil cookies[:login_token]
|
78
|
+
assert_nil session[:user_id]
|
79
|
+
@regular_user.reload
|
80
|
+
assert_nil @regular_user.remember_token
|
81
|
+
assert !@controller.logged_in?
|
82
|
+
assert_nil @controller.current_user
|
83
|
+
end
|
84
|
+
|
85
|
+
# >> Remember me -----------------------------------------------------------
|
86
|
+
|
87
|
+
def test_remember_me
|
88
|
+
post :create, :session_user => { :email => @regular_user.email, :password => @regular_user.password , :remember_me => '1' }
|
89
|
+
assert_equal request.session[:user_id], @regular_user.id
|
90
|
+
assert_not_nil assigns(:session_user).user.remember_token
|
91
|
+
assert_equal assigns(:session_user).user.remember_token, cookies['login_token']
|
92
|
+
end
|
93
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../../config/environment', __FILE__)
|
|
3
3
|
require 'rails/test_help'
|
4
4
|
|
5
5
|
class ActiveSupport::TestCase
|
6
|
-
self.use_transactional_fixtures =
|
6
|
+
self.use_transactional_fixtures = true
|
7
7
|
self.use_instantiated_fixtures = false
|
8
8
|
|
9
9
|
def data_path(name)
|
@@ -42,10 +42,8 @@ class ActiveSupport::TestCase
|
|
42
42
|
if (v != map[k])
|
43
43
|
a << k
|
44
44
|
end
|
45
|
-
|
46
45
|
a
|
47
46
|
end
|
48
|
-
|
49
47
|
assert_equal map, result_map, "Difference: #{map.slice(*differences).inspect} vs #{result_map.slice(*differences).inspect}"
|
50
48
|
end
|
51
49
|
|
@@ -64,9 +62,7 @@ class ActiveSupport::TestCase
|
|
64
62
|
end
|
65
63
|
|
66
64
|
session[:user_id] = user.id
|
67
|
-
|
68
65
|
token = Wristband::Support.encrypt_with_salt(user.id.to_s, Time.now.to_f.to_s)
|
69
|
-
|
70
66
|
cookies[:login_token] = {
|
71
67
|
:value => token,
|
72
68
|
:expires => 2.weeks.from_now.utc
|
@@ -33,16 +33,9 @@ class NewUser < ActiveRecord::Base
|
|
33
33
|
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
34
34
|
end
|
35
35
|
|
36
|
-
column :email, :string
|
37
|
-
column :to_email, :string
|
38
|
-
column :article_id, :integer
|
39
|
-
column :message, :text
|
40
36
|
column :email
|
41
|
-
column :
|
42
|
-
column :validated_at
|
43
|
-
column :password_crypt
|
37
|
+
column :password_hash
|
44
38
|
column :password_salt
|
45
|
-
column :remember_token
|
46
39
|
column :role
|
47
40
|
|
48
41
|
wristband :has_authorities => true
|
@@ -1,8 +1,50 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class SessionUserTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
|
5
|
+
def test_create_defaults
|
6
|
+
session_user = SessionUser.new(
|
7
|
+
:email => 'test@test.com',
|
8
|
+
:password => 'password'
|
9
|
+
)
|
10
|
+
assert session_user.valid?
|
11
|
+
assert_equal session_user.email, 'test@test.com'
|
12
|
+
assert_equal session_user.password, 'password'
|
13
|
+
assert_nil session_user.user
|
7
14
|
end
|
8
|
-
|
15
|
+
|
16
|
+
def test_create_requirements
|
17
|
+
session_user = SessionUser.new
|
18
|
+
assert !session_user.valid?
|
19
|
+
assert_errors_on session_user, :email, :password
|
20
|
+
assert session_user.errors[:email].include?("Please enter your email address")
|
21
|
+
assert session_user.errors[:email].include?("The email address you entered is not valid")
|
22
|
+
assert session_user.errors[:email].include?("The email address you entered is to short")
|
23
|
+
assert session_user.errors[:password].include?("Please choose a password")
|
24
|
+
assert session_user.errors[:password].include?("The password you entered is too short (minimum is 4 characters)")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_successful_authentication
|
28
|
+
user = a User
|
29
|
+
session_user = SessionUser.create(
|
30
|
+
:email => user.email,
|
31
|
+
:password => user.password
|
32
|
+
)
|
33
|
+
assert session_user.valid?
|
34
|
+
assert_equal session_user.email, user.email
|
35
|
+
assert_equal session_user.password, user.password
|
36
|
+
assert_equal session_user.user, user
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_failed_authentication
|
40
|
+
user = a User
|
41
|
+
session_user = SessionUser.create(
|
42
|
+
:email => user.email,
|
43
|
+
:password => '-bugus-'
|
44
|
+
)
|
45
|
+
assert session_user.valid?
|
46
|
+
assert_equal session_user.email, user.email
|
47
|
+
assert_equal session_user.password, '-bugus-'
|
48
|
+
assert_nil session_user.user
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UserMailerTest < ActionMailer::TestCase
|
4
|
+
|
5
|
+
def test_password_reset
|
6
|
+
user = a User
|
7
|
+
user.reset_perishable_token!
|
8
|
+
assert_emails 1 do
|
9
|
+
response = UserMailer.password_reset(user).deliver
|
10
|
+
assert_equal "You have requested a new password", response.subject
|
11
|
+
assert_equal 2, response.parts.length
|
12
|
+
response.parts.each do |part|
|
13
|
+
assert_match /#{user.perishable_token}/, part.body.to_s
|
14
|
+
end
|
15
|
+
assert_equal user.email, response.to[0]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/unit/user_test.rb
CHANGED
@@ -8,7 +8,7 @@ class UserTest < ActiveSupport::TestCase
|
|
8
8
|
:password => 'tester',
|
9
9
|
:password_confirmation => 'tester'
|
10
10
|
)
|
11
|
-
user.role =
|
11
|
+
user.role = 'admin'
|
12
12
|
user.save
|
13
13
|
assert_created user
|
14
14
|
end
|
@@ -31,75 +31,4 @@ class UserTest < ActiveSupport::TestCase
|
|
31
31
|
assert_created user
|
32
32
|
end
|
33
33
|
|
34
|
-
def test_user_instance_methods
|
35
|
-
@user = a User
|
36
|
-
%w{
|
37
|
-
has_authority_to?
|
38
|
-
has_objections_to?
|
39
|
-
initialize_salt
|
40
|
-
initialize_token
|
41
|
-
encrypt_password
|
42
|
-
password_match?
|
43
|
-
password_crypted?
|
44
|
-
password_crypt=
|
45
|
-
is_admin?
|
46
|
-
is_regular_user?
|
47
|
-
}.each do |method|
|
48
|
-
assert @user.respond_to?(method), "On '#{method}' method"
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_user_class_methods
|
53
|
-
@user = a User
|
54
|
-
%w{
|
55
|
-
authenticate
|
56
|
-
execute_authentication_chain
|
57
|
-
verify_email!
|
58
|
-
wristband
|
59
|
-
}.each do |method|
|
60
|
-
assert User.respond_to?(method), "On '#{method}' method"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_user_class_private_methods
|
65
|
-
%w{
|
66
|
-
random_string
|
67
|
-
encrypt_with_salt
|
68
|
-
random_salt
|
69
|
-
}.each do |method|
|
70
|
-
assert User.private_methods.include?(method), "On '#{method}' method"
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_assigned_options
|
75
|
-
assert_equal User.wristband[:login_with_fields], [:email]
|
76
|
-
assert_equal User.wristband[:before_authentication_chain], []
|
77
|
-
assert_equal User.wristband[:after_authentication_chain], []
|
78
|
-
assert_equal User.wristband[:password_column], :password_crypt
|
79
|
-
assert_equal User.wristband[:roles], [:admin, :regular_user]
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_authentication_by_email
|
83
|
-
@user = a User
|
84
|
-
assert_equal @user, User.authenticate(@user.email, 'passpass')
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_authentication_fails
|
88
|
-
@user = a User
|
89
|
-
assert_nil User.authenticate('-bugus-', 'passpass')
|
90
|
-
assert_nil User.authenticate(@user.email, '-bugus-')
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_password_match
|
94
|
-
@user = a User
|
95
|
-
assert @user.password_match?('passpass')
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_user_roles
|
99
|
-
@user = a User
|
100
|
-
@user.update_attribute(:role, :regular_user)
|
101
|
-
assert @user.is_regular_user?
|
102
|
-
@user.update_attribute(:role, :admin)
|
103
|
-
assert @user.is_admin?
|
104
|
-
end
|
105
34
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class WristbandTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def test_user_instance_methods
|
6
|
+
@user = a User
|
7
|
+
%w{
|
8
|
+
has_authority_to?
|
9
|
+
has_objections_to?
|
10
|
+
initialize_salt
|
11
|
+
initialize_token
|
12
|
+
encrypt_password
|
13
|
+
password_match?
|
14
|
+
password_hash=
|
15
|
+
is_admin?
|
16
|
+
is_regular_user?
|
17
|
+
}.each do |method|
|
18
|
+
assert @user.respond_to?(method), "On '#{method}' method"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_user_class_methods
|
23
|
+
@user = a User
|
24
|
+
%w{
|
25
|
+
authenticate
|
26
|
+
execute_authentication_chain
|
27
|
+
wristband
|
28
|
+
}.each do |method|
|
29
|
+
assert User.respond_to?(method), "On '#{method}' method"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_user_class_private_methods
|
34
|
+
%w{
|
35
|
+
random_string
|
36
|
+
encrypt_with_salt
|
37
|
+
random_salt
|
38
|
+
}.each do |method|
|
39
|
+
assert User.private_methods.include?(method.to_sym), "On '#{method}' method"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_assigned_options
|
44
|
+
assert_equal User.wristband[:login_with_fields], [:email]
|
45
|
+
assert_equal User.wristband[:before_authentication_chain], []
|
46
|
+
assert_equal User.wristband[:after_authentication_chain], []
|
47
|
+
assert_equal User.wristband[:password_column], :password_hash
|
48
|
+
assert_equal User.wristband[:roles], ['admin', 'regular_user']
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_authentication_by_email
|
52
|
+
@user = a User
|
53
|
+
assert_equal @user, User.authenticate(@user.email, @user.password)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_authentication_fails
|
57
|
+
@user = a User
|
58
|
+
assert_nil User.authenticate('-bugus-', @user.password)
|
59
|
+
assert_nil User.authenticate(@user.email, '-bugus-')
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_password_match
|
63
|
+
@user = a User
|
64
|
+
assert @user.password_match?('password')
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_user_roles
|
68
|
+
@user = a User
|
69
|
+
@user.update_attribute(:role, 'regular_user')
|
70
|
+
assert @user.is_regular_user?
|
71
|
+
@user.update_attribute(:role, 'admin')
|
72
|
+
assert @user.is_admin?
|
73
|
+
end
|
74
|
+
end
|