janus 0.7.0 → 0.8.0
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +3 -0
- data/.gitignore +4 -0
- data/.travis.yml +18 -0
- data/LICENSE +20 -0
- data/README.rdoc +4 -5
- data/Rakefile +22 -0
- data/VERSION +1 -0
- data/certs/ysbaddaden.pem +21 -0
- data/janus.gemspec +28 -0
- data/lib/generators/janus/resource_generator.rb +17 -1
- data/lib/generators/templates/janus.rb +9 -5
- data/lib/generators/templates/mailer.rb +3 -0
- data/lib/generators/templates/mailer/confirmation_instructions.html.erb +7 -0
- data/lib/generators/templates/mailer/confirmation_instructions.text.erb +7 -0
- data/lib/generators/templates/mailer/reset_password_instructions.html.erb +9 -0
- data/lib/generators/templates/mailer/reset_password_instructions.text.erb +7 -0
- data/lib/janus.rb +3 -0
- data/lib/janus/config.rb +9 -3
- data/lib/janus/controllers/confirmations_controller.rb +1 -1
- data/lib/janus/controllers/internal_helpers.rb +8 -1
- data/lib/janus/controllers/passwords_controller.rb +1 -1
- data/lib/janus/controllers/registrations_controller.rb +1 -1
- data/lib/janus/controllers/sessions_controller.rb +6 -5
- data/lib/janus/models/confirmable.rb +2 -0
- data/lib/janus/models/database_authenticatable.rb +4 -2
- data/lib/janus/models/rememberable.rb +2 -0
- data/lib/janus/models/remote_authenticatable.rb +2 -0
- data/lib/janus/models/remote_token.rb +6 -5
- data/lib/janus/models/token_authenticatable.rb +79 -0
- data/lib/janus/models/trackable.rb +2 -0
- data/lib/janus/strategies.rb +1 -1
- data/lib/janus/strategies/token_authenticatable.rb +22 -0
- data/lib/janus/version.rb +10 -0
- data/test/fixtures/admins.yml +5 -0
- data/test/fixtures/users.yml +10 -0
- data/test/functional/admins/sessions_controller_test.rb +13 -0
- data/test/functional/home_controller_test.rb +8 -0
- data/test/functional/janus/mailer_test.rb +14 -0
- data/test/functional/janus/manager_test.rb +94 -0
- data/test/functional/users/confirmations_controller_test.rb +68 -0
- data/test/functional/users/passwords_controller_test.rb +131 -0
- data/test/functional/users/registrations_controller_test.rb +112 -0
- data/test/functional/users/sessions_controller_test.rb +100 -0
- data/test/functional/users_controller_test.rb +29 -0
- data/test/generators/install_generator_test.rb +16 -0
- data/test/generators/resource_generator_test.rb +80 -0
- data/test/integration/users/rememberable_test.rb +32 -0
- data/test/integration/users/remote_test.rb +72 -0
- data/test/integration/users/sessions_test.rb +18 -0
- data/test/integration/users/token_authenticatable_test.rb +42 -0
- data/test/integration/users/trackable_test.rb +22 -0
- data/test/rails_app/.gitignore +4 -0
- data/test/rails_app/Rakefile +7 -0
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +11 -0
- data/test/rails_app/app/controllers/application_controller.rb +9 -0
- data/test/rails_app/app/controllers/blogs_controller.rb +6 -0
- data/test/rails_app/app/controllers/home_controller.rb +4 -0
- data/test/rails_app/app/controllers/users/confirmations_controller.rb +3 -0
- data/test/rails_app/app/controllers/users/passwords_controller.rb +3 -0
- data/test/rails_app/app/controllers/users/registrations_controller.rb +17 -0
- data/test/rails_app/app/controllers/users/sessions_controller.rb +11 -0
- data/test/rails_app/app/controllers/users_controller.rb +9 -0
- data/test/rails_app/app/helpers/application_helper.rb +2 -0
- data/test/rails_app/app/mailers/user_mailer.rb +3 -0
- data/test/rails_app/app/models/admin.rb +3 -0
- data/test/rails_app/app/models/remote_token.rb +6 -0
- data/test/rails_app/app/models/user.rb +8 -0
- data/test/rails_app/app/views/admins/sessions/new.html.erb +30 -0
- data/test/rails_app/app/views/blogs/show.html.erb +2 -0
- data/test/rails_app/app/views/home/index.html.erb +2 -0
- data/test/rails_app/app/views/layouts/application.html.erb +28 -0
- data/test/rails_app/app/views/user_mailer/confirmation_instructions.html.erb +7 -0
- data/test/rails_app/app/views/user_mailer/confirmation_instructions.text.erb +7 -0
- data/test/rails_app/app/views/user_mailer/reset_password_instructions.html.erb +9 -0
- data/test/rails_app/app/views/user_mailer/reset_password_instructions.text.erb +7 -0
- data/test/rails_app/app/views/users/confirmations/new.html.erb +16 -0
- data/test/rails_app/app/views/users/passwords/edit.html.erb +21 -0
- data/test/rails_app/app/views/users/passwords/new.html.erb +16 -0
- data/test/rails_app/app/views/users/registrations/edit.html.erb +31 -0
- data/test/rails_app/app/views/users/registrations/new.html.erb +26 -0
- data/test/rails_app/app/views/users/sessions/new.html.erb +30 -0
- data/test/rails_app/app/views/users/show.html.erb +2 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/config/application.rb +43 -0
- data/test/rails_app/config/boot.rb +6 -0
- data/test/rails_app/config/database.yml +22 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +23 -0
- data/test/rails_app/config/environments/production.rb +50 -0
- data/test/rails_app/config/environments/test.rb +34 -0
- data/test/rails_app/config/initializers/janus.rb +25 -0
- data/test/rails_app/config/initializers/secret_token.rb +8 -0
- data/test/rails_app/config/initializers/session_store.rb +8 -0
- data/test/rails_app/config/locales/janus.en.yml +65 -0
- data/test/rails_app/config/routes.rb +13 -0
- data/test/rails_app/db/migrate/20110323153820_create_users.rb +40 -0
- data/test/rails_app/db/migrate/20110331153546_create_remote_tokens.rb +15 -0
- data/test/rails_app/db/migrate/20130412104138_create_admins.rb +10 -0
- data/test/rails_app/db/schema.rb +58 -0
- data/test/rails_app/db/seeds.rb +7 -0
- data/test/rails_app/lib/tasks/.gitkeep +0 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/script/rails +6 -0
- data/test/test_helper.rb +121 -0
- data/test/unit/confirmable_test.rb +36 -0
- data/test/unit/janus_test.rb +27 -0
- data/test/unit/rememberable_test.rb +47 -0
- data/test/unit/remote_authenticatable_test.rb +37 -0
- data/test/unit/remote_token_test.rb +9 -0
- data/test/unit/reset_password_test.rb +45 -0
- data/test/unit/token_authenticatable_test.rb +41 -0
- data/test/unit/trackable_test.rb +21 -0
- data/test/unit/user_test.rb +68 -0
- metadata +303 -21
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
|
2
|
+
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
|
3
|
+
#
|
|
4
|
+
# Examples:
|
|
5
|
+
#
|
|
6
|
+
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
|
|
7
|
+
# Mayor.create(:name => 'Daley', :city => cities.first)
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
|
5
|
+
<style type="text/css">
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/404.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
|
23
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
|
24
|
+
</div>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
|
5
|
+
<style type="text/css">
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/422.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>The change you wanted was rejected.</h1>
|
|
23
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
|
24
|
+
</div>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
|
5
|
+
<style type="text/css">
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/500.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>We're sorry, but something went wrong.</h1>
|
|
23
|
+
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
|
|
24
|
+
</div>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
3
|
+
|
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
|
6
|
+
require 'rails/commands'
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../rails_app/config/environment', __FILE__)
|
|
4
|
+
require 'rails/test_help'
|
|
5
|
+
require 'capybara/rails'
|
|
6
|
+
require 'minitest/mock'
|
|
7
|
+
|
|
8
|
+
ActiveRecord::Migration.verbose = false
|
|
9
|
+
ActiveRecord::Migrator.migrate(Rails.root.join('db', 'migrate').to_s)
|
|
10
|
+
|
|
11
|
+
class ActiveSupport::TestCase
|
|
12
|
+
self.fixture_path = File.expand_path('../fixtures', __FILE__)
|
|
13
|
+
fixtures :all
|
|
14
|
+
|
|
15
|
+
# Executes the given block having first modified Janus' encryptor.
|
|
16
|
+
# Resets the encryptor to its previous state after the block execution.
|
|
17
|
+
def with_encryptor(encryptor)
|
|
18
|
+
default_encryptor = Janus::Config.encryptor
|
|
19
|
+
begin
|
|
20
|
+
Janus::Config.encryptor = encryptor
|
|
21
|
+
yield
|
|
22
|
+
ensure
|
|
23
|
+
Janus::Config.encryptor = default_encryptor
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class ActionController::TestCase
|
|
29
|
+
include Janus::TestHelper
|
|
30
|
+
|
|
31
|
+
teardown { sign_out }
|
|
32
|
+
|
|
33
|
+
def assert_email(count = 1, message = nil)
|
|
34
|
+
assert_difference('ActionMailer::Base.deliveries.size', count, message) do
|
|
35
|
+
yield
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def assert_no_email(message = nil)
|
|
40
|
+
assert_no_difference('ActionMailer::Base.deliveries.size', message) do
|
|
41
|
+
yield
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class ActionDispatch::IntegrationTest
|
|
47
|
+
self.fixture_path = File.expand_path('../fixtures', __FILE__)
|
|
48
|
+
|
|
49
|
+
include Capybara::DSL
|
|
50
|
+
|
|
51
|
+
teardown { page.reset! }
|
|
52
|
+
|
|
53
|
+
def sign_up(user, options = {})
|
|
54
|
+
scope = options[:scope]
|
|
55
|
+
route = "new_#{scope}_registration_url"
|
|
56
|
+
|
|
57
|
+
visit send(route, options[:url])
|
|
58
|
+
fill_in "#{scope}_email", :with => user[:email]
|
|
59
|
+
fill_in "#{scope}_password", :with => user[:password]
|
|
60
|
+
fill_in "#{scope}_password_confirmation", :with => user[:password]
|
|
61
|
+
find('input[name=commit]').click
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def sign_in(user, options = {})
|
|
65
|
+
scope = options[:scope] || Janus.scope_for(user)
|
|
66
|
+
route = "new_#{scope}_session_url"
|
|
67
|
+
|
|
68
|
+
visit send(route, options[:url])
|
|
69
|
+
fill_in "#{scope}_email", :with => user.email
|
|
70
|
+
fill_in "#{scope}_password", :with => 'secret'
|
|
71
|
+
check "remember_me" if options[:remember_me]
|
|
72
|
+
find('input[name=commit]').click
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def sign_out(user_or_scope)
|
|
76
|
+
scope = Janus.scope_for(user_or_scope)
|
|
77
|
+
route = "destroy_#{scope}_session_url"
|
|
78
|
+
page.driver.submit :delete, send(route), {}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def service_login(scope, options)
|
|
82
|
+
route = "new_#{scope}_session_url"
|
|
83
|
+
visit send(route, options)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def close_user_session
|
|
87
|
+
driver = Capybara.current_session.driver
|
|
88
|
+
# case driver
|
|
89
|
+
# when Capybara::Driver::Selenium
|
|
90
|
+
# browser = driver.browser
|
|
91
|
+
# browser.manage.delete_cookie(cookie_name)
|
|
92
|
+
# when Capybara::Driver::RackTest
|
|
93
|
+
cookie_jar = driver.browser.current_session.instance_variable_get(:@rack_mock_session).cookie_jar
|
|
94
|
+
cookie_jar.instance_variable_get(:@cookies).reject! do |cookie|
|
|
95
|
+
expires = cookie.instance_variable_get(:@options)["expires"]
|
|
96
|
+
expires.nil? || Time.parse(expires) < Time.now
|
|
97
|
+
end
|
|
98
|
+
# end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def assert_authenticated
|
|
102
|
+
assert has_selector?("a#my_page"), "Expected user to be authenticated."
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def assert_not_authenticated
|
|
106
|
+
assert has_selector?("a#sign_in"), "Expected user to not be authenticated."
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def assert_select(selector)
|
|
110
|
+
assert has_selector?(selector), "Expected selector <#{selector}> but found none."
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
class ActionMailer::TestCase
|
|
115
|
+
include Rails.application.routes.url_helpers
|
|
116
|
+
|
|
117
|
+
def default_url_options
|
|
118
|
+
Rails.application.config.action_mailer.default_url_options
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ConfirmableTest < ActiveSupport::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@user = users(:julien)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "generate_confirmation_token" do
|
|
9
|
+
@user.generate_confirmation_token
|
|
10
|
+
assert_not_nil @user.confirmation_token
|
|
11
|
+
assert_not_nil @user.confirmation_sent_at
|
|
12
|
+
assert_nil @user.confirmed_at
|
|
13
|
+
|
|
14
|
+
@user.reload
|
|
15
|
+
assert_nil @user.confirmation_token
|
|
16
|
+
assert_nil @user.confirmation_sent_at
|
|
17
|
+
assert_nil @user.confirmed_at
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "confirm!" do
|
|
21
|
+
@user.generate_confirmation_token
|
|
22
|
+
@user.confirm!
|
|
23
|
+
assert_nil @user.confirmation_token
|
|
24
|
+
assert_nil @user.confirmation_sent_at
|
|
25
|
+
assert_not_nil @user.confirmed_at
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "find_for_confirmation" do
|
|
29
|
+
assert_nil User.find_for_confirmation(nil)
|
|
30
|
+
assert_nil User.find_for_confirmation("amroiuzigsqjg")
|
|
31
|
+
|
|
32
|
+
@user.generate_confirmation_token
|
|
33
|
+
@user.save!
|
|
34
|
+
assert_equal @user, User.find_for_confirmation(@user.confirmation_token)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class JanusTest < ActiveSupport::TestCase
|
|
4
|
+
test "scope_for symbol" do
|
|
5
|
+
assert_equal :user, Janus.scope_for(:user)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "scope_for string" do
|
|
9
|
+
assert_equal :user, Janus.scope_for("user")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "scope_for object" do
|
|
13
|
+
assert_equal :user, Janus.scope_for(User.new)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "config" do
|
|
17
|
+
pepper = Janus.config.pepper
|
|
18
|
+
begin
|
|
19
|
+
Janus.config do |config|
|
|
20
|
+
config.pepper = "0123456789"
|
|
21
|
+
end
|
|
22
|
+
assert_equal "0123456789", Janus.config.pepper
|
|
23
|
+
ensure
|
|
24
|
+
Janus.config.pepper = pepper
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RememberableTest < ActiveSupport::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@user = users(:julien)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "remember_token" do
|
|
9
|
+
@user.remember_me!
|
|
10
|
+
assert_not_nil @user.remember_token
|
|
11
|
+
assert_not_nil @user.remember_created_at
|
|
12
|
+
|
|
13
|
+
@user.forget_me!
|
|
14
|
+
assert_nil @user.remember_token
|
|
15
|
+
assert_nil @user.remember_created_at
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "should not remember across browsers" do
|
|
19
|
+
@user.remember_me!
|
|
20
|
+
token = @user.remember_token
|
|
21
|
+
@user.remember_me!
|
|
22
|
+
assert_not_equal token, @user.remember_token
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "find_for_remember_authentication" do
|
|
26
|
+
assert_nil User.find_for_remember_authentication(nil)
|
|
27
|
+
assert_nil User.find_for_remember_authentication(" ")
|
|
28
|
+
|
|
29
|
+
@user.remember_me!
|
|
30
|
+
token = @user.remember_token
|
|
31
|
+
|
|
32
|
+
assert_equal @user, User.find_for_remember_authentication(token)
|
|
33
|
+
assert_equal @user, User.find_for_remember_authentication(token)
|
|
34
|
+
|
|
35
|
+
@user.remember_me!
|
|
36
|
+
assert_nil User.find_for_remember_authentication(token), "token should no longer be valid"
|
|
37
|
+
|
|
38
|
+
@user.forget_me!
|
|
39
|
+
assert_nil User.find_for_remember_authentication(token), "token should have been erased"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "expiration" do
|
|
43
|
+
@user.remember_me!
|
|
44
|
+
@user.update_attribute(:remember_created_at, 1.year.ago)
|
|
45
|
+
assert_nil User.find_for_remember_authentication(@user.remember_token)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RemoteAuthenticatableTest < ActiveSupport::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@user = users(:julien)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "session token" do
|
|
9
|
+
@user.generate_session_token!
|
|
10
|
+
assert_not_nil @user.session_token
|
|
11
|
+
|
|
12
|
+
@user.destroy_session_token!
|
|
13
|
+
assert_nil @user.session_token
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "find_for_remote_authentication" do
|
|
17
|
+
assert_nil User.find_for_remote_authentication(nil)
|
|
18
|
+
assert_nil User.find_for_remote_authentication(" ")
|
|
19
|
+
|
|
20
|
+
token1 = token2 = nil
|
|
21
|
+
|
|
22
|
+
assert_difference('RemoteToken.count', 2) do
|
|
23
|
+
token1 = @user.generate_remote_token!
|
|
24
|
+
token2 = @user.generate_remote_token!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
assert_difference('RemoteToken.count', -1) do
|
|
28
|
+
assert_equal @user, User.find_for_remote_authentication(token1)
|
|
29
|
+
assert_nil User.find_for_remote_authentication(token1)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
assert_difference('RemoteToken.count', -1) do
|
|
33
|
+
assert_equal @user, User.find_for_remote_authentication(token2)
|
|
34
|
+
assert_nil User.find_for_remote_authentication(token2)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RemoteTokenTest < ActiveSupport::TestCase
|
|
4
|
+
test "should create" do
|
|
5
|
+
remote_token = RemoteToken.create(:user => users(:julien))
|
|
6
|
+
assert remote_token.persisted?, remote_token.errors.to_xml
|
|
7
|
+
assert_not_nil remote_token.token
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ResetPasswordTest < ActiveSupport::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@user = users(:julien)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "generate reset password token" do
|
|
9
|
+
assert @user.generate_reset_password_token!
|
|
10
|
+
assert @user.persisted?
|
|
11
|
+
assert_not_nil @user.reset_password_token
|
|
12
|
+
assert_not_nil @user.reset_password_sent_at
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
test "reset password" do
|
|
16
|
+
assert @user.generate_reset_password_token!
|
|
17
|
+
assert @user.reset_password!('password' => "azerty", 'password_confirmation' => "azerty")
|
|
18
|
+
assert @user.persisted?
|
|
19
|
+
assert_nil @user.reset_password_token
|
|
20
|
+
assert_nil @user.reset_password_sent_at
|
|
21
|
+
assert @user.valid_password?("azerty")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "should find user with token" do
|
|
25
|
+
@user.generate_reset_password_token!
|
|
26
|
+
user = User.find_for_password_reset(@user.reset_password_token)
|
|
27
|
+
assert_equal @user, user
|
|
28
|
+
assert_not_nil user.reset_password_token
|
|
29
|
+
assert_not_nil user.reset_password_sent_at
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test "should not find user with bad tokens" do
|
|
33
|
+
assert_nil User.find_for_password_reset(nil)
|
|
34
|
+
assert_nil User.find_for_password_reset("ariualfknsmgojqm")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
test "token expiration" do
|
|
38
|
+
@user.generate_reset_password_token!
|
|
39
|
+
@user.update_attribute(:reset_password_sent_at, 1.week.ago)
|
|
40
|
+
assert_nil User.find_for_password_reset(@user.reset_password_token)
|
|
41
|
+
@user.reload
|
|
42
|
+
assert_nil @user.reset_password_token
|
|
43
|
+
assert_nil @user.reset_password_sent_at
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TokenAuthenticatableTest < ActiveSupport::TestCase
|
|
4
|
+
setup { @user = users(:julien) }
|
|
5
|
+
|
|
6
|
+
test "reset_authentication_token" do
|
|
7
|
+
@user.reset_authentication_token
|
|
8
|
+
assert @user.authentication_token_changed?
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "reset_authentication_token!" do
|
|
12
|
+
token = @user.authentication_token
|
|
13
|
+
@user.reset_authentication_token!
|
|
14
|
+
refute @user.authentication_token_changed?
|
|
15
|
+
refute_equal token, @user.authentication_token
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "find_for_token_authentication" do
|
|
19
|
+
@user.reset_authentication_token!
|
|
20
|
+
user = User.find_for_token_authentication(@user.authentication_token)
|
|
21
|
+
assert_equal @user, user
|
|
22
|
+
refute_nil @user.reload.authentication_token
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "find_for_token_authentication with expired token" do
|
|
26
|
+
@user.reset_authentication_token!
|
|
27
|
+
@user.update_attribute :authentication_token_created_at, 1.month.ago
|
|
28
|
+
|
|
29
|
+
assert_nil User.find_for_token_authentication(@user.authentication_token)
|
|
30
|
+
assert_nil @user.reload.authentication_token
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test "find_for_token_authentication must destroy non reusable token" do
|
|
34
|
+
@user.reset_authentication_token!
|
|
35
|
+
|
|
36
|
+
User.stub(:reusable_authentication_token, false) do
|
|
37
|
+
assert_equal @user, User.find_for_token_authentication(@user.authentication_token)
|
|
38
|
+
assert_nil @user.reload.authentication_token
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|