devise_token_auth 0.1.32.beta10 → 0.1.32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -31
- data/app/controllers/devise_token_auth/confirmations_controller.rb +2 -0
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +2 -0
- data/app/controllers/devise_token_auth/passwords_controller.rb +25 -14
- data/app/controllers/devise_token_auth/registrations_controller.rb +22 -11
- data/app/controllers/devise_token_auth/sessions_controller.rb +15 -9
- data/app/controllers/devise_token_auth/token_validations_controller.rb +2 -1
- data/app/models/devise_token_auth/concerns/user.rb +19 -14
- data/app/validators/email_validator.rb +1 -1
- data/config/locales/en.yml +30 -0
- data/config/locales/es.yml +30 -0
- data/config/locales/fr.yml +30 -0
- data/lib/devise_token_auth/engine.rb +10 -8
- data/lib/devise_token_auth/version.rb +1 -1
- data/lib/generators/devise_token_auth/install_generator.rb +28 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +6 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +2 -2
- data/test/controllers/custom/custom_confirmations_controller_test.rb +26 -0
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +29 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +66 -0
- data/test/controllers/custom/custom_registrations_controller_test.rb +1 -1
- data/test/controllers/custom/custom_sessions_controller_test.rb +30 -0
- data/test/controllers/custom/custom_token_validations_controller_test.rb +29 -0
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +159 -10
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +249 -58
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +80 -1
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +17 -0
- data/test/dummy/app/controllers/application_controller.rb +1 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +35 -0
- data/test/dummy/app/controllers/custom/sessions_controller.rb +23 -0
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +13 -0
- data/test/dummy/app/models/unconfirmable_user.rb +8 -0
- data/test/dummy/config/application.rb +1 -0
- data/test/dummy/config/routes.rb +8 -1
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +7 -1
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +7 -1
- data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +7 -1
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +7 -1
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +7 -1
- data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +7 -1
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +60 -0
- data/test/dummy/db/schema.rb +89 -64
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/lib/migration_database_helper.rb +29 -0
- data/test/dummy/log/test.log +41319 -29566
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +6 -0
- data/test/dummy/tmp/generators/config/routes.rb +4 -0
- data/test/dummy/tmp/generators/db/migrate/{20150617175802_devise_token_auth_create_users.rb → 20150729144233_devise_token_auth_create_users.rb} +1 -1
- data/test/fixtures/unconfirmable_users.yml +9 -0
- data/test/fixtures/users.yml +12 -0
- data/test/models/user_test.rb +21 -0
- metadata +39 -13
- data/config/locales/devise.en.yml +0 -59
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -473
- data/test/dummy/tmp/generators/app/controllers/application_controller.rb +0 -6
@@ -6,6 +6,7 @@ module DeviseTokenAuth
|
|
6
6
|
def validate_token
|
7
7
|
# @resource will have been set by set_user_token concern
|
8
8
|
if @resource
|
9
|
+
yield if block_given?
|
9
10
|
render json: {
|
10
11
|
success: true,
|
11
12
|
data: @resource.token_validation_response
|
@@ -13,7 +14,7 @@ module DeviseTokenAuth
|
|
13
14
|
else
|
14
15
|
render json: {
|
15
16
|
success: false,
|
16
|
-
errors: ["
|
17
|
+
errors: [I18n.t("devise_token_auth.token_validations.invalid")]
|
17
18
|
}, status: 401
|
18
19
|
end
|
19
20
|
end
|
@@ -21,7 +21,9 @@ module DeviseTokenAuth::Concerns::User
|
|
21
21
|
self.devise_modules.delete(:omniauthable)
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
unless tokens_has_json_column_type?
|
25
|
+
serialize :tokens, JSON
|
26
|
+
end
|
25
27
|
|
26
28
|
validates :email, presence: true, email: true, if: Proc.new { |u| u.provider == 'email' }
|
27
29
|
validates_presence_of :uid, if: Proc.new { |u| u.provider != 'email' }
|
@@ -76,18 +78,21 @@ module DeviseTokenAuth::Concerns::User
|
|
76
78
|
# fall back to "default" config name
|
77
79
|
opts[:client_config] ||= "default"
|
78
80
|
|
79
|
-
if respond_to?(:pending_reconfirmation?) && pending_reconfirmation?
|
80
|
-
opts[:to] = unconfirmed_email
|
81
|
-
else
|
82
|
-
opts[:to] = email
|
83
|
-
end
|
84
|
-
|
85
81
|
send_devise_notification(:reset_password_instructions, token, opts)
|
86
82
|
|
87
83
|
token
|
88
84
|
end
|
89
85
|
end
|
90
86
|
|
87
|
+
module ClassMethods
|
88
|
+
protected
|
89
|
+
|
90
|
+
|
91
|
+
def tokens_has_json_column_type?
|
92
|
+
table_exists? && self.columns_hash['tokens'] && self.columns_hash['tokens'].type.in?([:json, :jsonb])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
91
96
|
|
92
97
|
def valid_token?(token, client_id='default')
|
93
98
|
client_id ||= 'default'
|
@@ -218,16 +223,14 @@ module DeviseTokenAuth::Concerns::User
|
|
218
223
|
protected
|
219
224
|
|
220
225
|
|
221
|
-
# NOTE: ensure that fragment comes AFTER querystring for proper $location
|
222
|
-
# parsing using AngularJS.
|
223
226
|
def generate_url(url, params = {})
|
224
227
|
uri = URI(url)
|
225
228
|
|
226
229
|
res = "#{uri.scheme}://#{uri.host}"
|
227
230
|
res += ":#{uri.port}" if (uri.port and uri.port != 80 and uri.port != 443)
|
228
231
|
res += "#{uri.path}" if uri.path
|
229
|
-
res += "##{uri.fragment}" if uri.fragment
|
230
232
|
res += "?#{params.to_query}"
|
233
|
+
res += "##{uri.fragment}" if uri.fragment
|
231
234
|
|
232
235
|
return res
|
233
236
|
end
|
@@ -248,10 +251,12 @@ module DeviseTokenAuth::Concerns::User
|
|
248
251
|
end
|
249
252
|
|
250
253
|
def destroy_expired_tokens
|
251
|
-
self.tokens
|
252
|
-
|
253
|
-
|
254
|
-
|
254
|
+
if self.tokens
|
255
|
+
self.tokens.delete_if do |cid, v|
|
256
|
+
expiry = v[:expiry] || v["expiry"]
|
257
|
+
DateTime.strptime(expiry.to_s, '%s') < Time.now
|
258
|
+
end
|
259
|
+
end
|
255
260
|
end
|
256
261
|
|
257
262
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class EmailValidator < ActiveModel::EachValidator
|
2
2
|
def validate_each(record, attribute, value)
|
3
3
|
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
4
|
-
record.errors[attribute] << (options[:message] ||
|
4
|
+
record.errors[attribute] << (options[:message] || I18n.t("errors.not_email"))
|
5
5
|
end
|
6
6
|
end
|
7
7
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
en:
|
2
|
+
devise_token_auth:
|
3
|
+
sessions:
|
4
|
+
not_confirmed: "A confirmation email was sent to your account at %{email}. You must follow the instructions in the email before your account can be activated"
|
5
|
+
bad_credentials: "Invalid login credentials. Please try again."
|
6
|
+
not_supported: "Use POST /sign_in to sign in. GET is not supported."
|
7
|
+
user_not_found: "User was not found or was not logged in."
|
8
|
+
token_validations:
|
9
|
+
invalid: "Invalid login credentials"
|
10
|
+
registrations:
|
11
|
+
missing_confirm_success_url: "Missing `confirm_success_url` param."
|
12
|
+
redirect_url_not_allowed: "Redirect to %{redirect_url} not allowed."
|
13
|
+
email_already_exists: "An account already exists for %{email}"
|
14
|
+
account_with_uid_destroyed: "Account with uid %{uid} has been destroyed."
|
15
|
+
account_to_destroy_not_found: "Unable to locate account for destruction."
|
16
|
+
user_not_found: "User not found."
|
17
|
+
passwords:
|
18
|
+
missing_email: "You must provide an email address."
|
19
|
+
missing_redirect_url: "Missing redirect url."
|
20
|
+
not_allowed_redirect_url: "Redirect to %{redirect_url} not allowed."
|
21
|
+
sended: "An email has been sent to %{email} containing instructions for resetting your password."
|
22
|
+
user_not_found: "Unable to find user with email '%{email}'."
|
23
|
+
password_not_required: "This account does not require a password. Sign in using your %{provider} account instead."
|
24
|
+
missing_passwords: 'You must fill out the fields labeled "password" and "password confirmation".'
|
25
|
+
successfully_updated: "Your password has been successfully updated."
|
26
|
+
|
27
|
+
errors:
|
28
|
+
validate_sign_up_params: "Please submit proper sign up data in request body."
|
29
|
+
validate_account_update_params: "Please submit proper account update data in request body."
|
30
|
+
not_email: "is not an email"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
es:
|
2
|
+
devise_token_auth:
|
3
|
+
sessions:
|
4
|
+
not_confirmed: "Un correo electrónico de confirmación de su cuenta ha sido enviado a %{email}. Por favor, siga las instrucciones para validar su cuenta"
|
5
|
+
bad_credentials: "Identidad o contraseña no válida."
|
6
|
+
not_supported: "Use POST /sign_in para la conexión. GET no esta disponible."
|
7
|
+
user_not_found: "Usuario desconocido o no está conectado."
|
8
|
+
token_validations:
|
9
|
+
invalid: "Identidad o contraseña no válida."
|
10
|
+
registrations:
|
11
|
+
missing_confirm_success_url: "El parámetro `confirm_success_url` no esta presente."
|
12
|
+
redirect_url_not_allowed: "Redirección hacia %{redirect_url} no esta permitida."
|
13
|
+
email_already_exists: "Una cuenta ya existe con este correo electrónico: %{email}"
|
14
|
+
account_with_uid_destroyed: "La cuenta con el identificador %{uid} se ha eliminado."
|
15
|
+
account_to_destroy_not_found: "No se puede encontrar la cuenta a borrar."
|
16
|
+
user_not_found: "Usuario no encontrado."
|
17
|
+
passwords:
|
18
|
+
missing_email: "Debe incluir un correo electrónico."
|
19
|
+
missing_redirect_url: "Falta el Url de redirección."
|
20
|
+
not_allowed_redirect_url: "Redirección hacia %{redirect_url} no esta permitida."
|
21
|
+
sended: "Un correo electrónico ha sido enviado a %{email} con las instrucciones para restablecer su contraseña."
|
22
|
+
user_not_found: "No se pudo encontrar un usuario con este correo electrónico: '%{email}'."
|
23
|
+
password_not_required: "Esta cuenta no requiere contraseña. Iniciar sesión utilizando %{provider}."
|
24
|
+
missing_passwords: 'Debe llenar los campos "contraseña" y "confirmación de contraseña".'
|
25
|
+
successfully_updated: "Su contraseña ha sido actualizada con éxito."
|
26
|
+
|
27
|
+
errors:
|
28
|
+
validate_sign_up_params: "Los datos introducidos en la solicitud de acceso no son válidos."
|
29
|
+
validate_account_update_params: "Los datos introducidos en la solicitud de actualización no son válidos."
|
30
|
+
not_email: "no es un correo electrónico"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
fr:
|
2
|
+
devise_token_auth:
|
3
|
+
sessions:
|
4
|
+
not_confirmed: "Une email de confirmation de votre compte a été envoyé à %{email}. Merci de suivre les instructions afin de valider votre compte"
|
5
|
+
bad_credentials: "Mot de passe ou identifiant invalide."
|
6
|
+
not_supported: "Utilisez POST /sign_in pour la connexion. GET n'est pas supporté."
|
7
|
+
user_not_found: "L'utilisateur est inconnu ou n'est pas connecté."
|
8
|
+
token_validations:
|
9
|
+
invalid: "Mot de passe ou identifiant invalide."
|
10
|
+
registrations:
|
11
|
+
missing_confirm_success_url: "Le paramètre `confirm_success_url` est manquant."
|
12
|
+
redirect_url_not_allowed: "Redirection vers %{redirect_url} n'est pas autorisée."
|
13
|
+
email_already_exists: "Un compte existe déjà avec cet email: %{email}"
|
14
|
+
account_with_uid_destroyed: "Le compte avec l'identifiant %{uid} a été supprimé."
|
15
|
+
account_to_destroy_not_found: "Impossible de trouver le compte à supprimer."
|
16
|
+
user_not_found: "Utilisateur non trouvé."
|
17
|
+
passwords:
|
18
|
+
missing_email: "Vous devez soumettre un email."
|
19
|
+
missing_redirect_url: "Url de redirection manquante."
|
20
|
+
not_allowed_redirect_url: "Redirection vers %{redirect_url} n'est pas autorisée."
|
21
|
+
sended: "Un email a été envoyé à %{email} avec les instructions pour réinitialiser votre mot de passe."
|
22
|
+
user_not_found: "Impossible de trouver un utilisateur avec cet email: '%{email}'."
|
23
|
+
password_not_required: "Ce compte ne demande pas de mot de passe. Connectez vous plutôt en utilisant %{provider}."
|
24
|
+
missing_passwords: 'Vous devez remplir les champs "mt de passe" et "confirmation de mot de passe".'
|
25
|
+
successfully_updated: "Votre mot de passe a été correctement mis à jour."
|
26
|
+
|
27
|
+
errors:
|
28
|
+
validate_sign_up_params: "Les données de l'inscription dans le corps de la requête ne sont pas valides."
|
29
|
+
validate_account_update_params: "Les données de mise à jour dans le corps de la requête ne sont pas valides."
|
30
|
+
not_email: "n'est pas un email"
|
@@ -15,15 +15,17 @@ module DeviseTokenAuth
|
|
15
15
|
:omniauth_prefix,
|
16
16
|
:default_confirm_success_url,
|
17
17
|
:default_password_reset_url,
|
18
|
-
:redirect_whitelist
|
18
|
+
:redirect_whitelist,
|
19
|
+
:check_current_password_before_update
|
19
20
|
|
20
|
-
self.change_headers_on_each_request
|
21
|
-
self.token_lifespan
|
22
|
-
self.batch_request_buffer_throttle
|
23
|
-
self.omniauth_prefix
|
24
|
-
self.default_confirm_success_url
|
25
|
-
self.default_password_reset_url
|
26
|
-
self.redirect_whitelist
|
21
|
+
self.change_headers_on_each_request = true
|
22
|
+
self.token_lifespan = 2.weeks
|
23
|
+
self.batch_request_buffer_throttle = 5.seconds
|
24
|
+
self.omniauth_prefix = '/omniauth'
|
25
|
+
self.default_confirm_success_url = nil
|
26
|
+
self.default_password_reset_url = nil
|
27
|
+
self.redirect_whitelist = nil
|
28
|
+
self.check_current_password_before_update = false
|
27
29
|
|
28
30
|
def self.setup(&block)
|
29
31
|
yield self
|
@@ -115,5 +115,33 @@ module DeviseTokenAuth
|
|
115
115
|
end
|
116
116
|
match
|
117
117
|
end
|
118
|
+
|
119
|
+
def json_supported_database?
|
120
|
+
(postgres? && postgres_correct_version?) || (mysql? && mysql_correct_version?)
|
121
|
+
end
|
122
|
+
|
123
|
+
def postgres?
|
124
|
+
database_name == 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter'
|
125
|
+
end
|
126
|
+
|
127
|
+
def postgres_correct_version?
|
128
|
+
database_version > '9.3'
|
129
|
+
end
|
130
|
+
|
131
|
+
def mysql?
|
132
|
+
database_name == 'ActiveRecord::ConnectionAdapters::MysqlAdapter'
|
133
|
+
end
|
134
|
+
|
135
|
+
def mysql_correct_version?
|
136
|
+
database_version > '5.7.7'
|
137
|
+
end
|
138
|
+
|
139
|
+
def database_name
|
140
|
+
ActiveRecord::Base.connection.class.name
|
141
|
+
end
|
142
|
+
|
143
|
+
def database_version
|
144
|
+
ActiveRecord::Base.connection.select_value('SELECT VERSION()')
|
145
|
+
end
|
118
146
|
end
|
119
147
|
end
|
@@ -19,4 +19,10 @@ DeviseTokenAuth.setup do |config|
|
|
19
19
|
# example, using the default '/omniauth', the github oauth2 provider will
|
20
20
|
# redirect successful authentications to '/omniauth/github/callback'
|
21
21
|
#config.omniauth_prefix = "/omniauth"
|
22
|
+
|
23
|
+
# By defult sending current password is not needed for the password update.
|
24
|
+
# Uncomment to enforce current_password param to be checked before all
|
25
|
+
# attribute updates. Set it to :password if you want it to be checked only if
|
26
|
+
# password is updated.
|
27
|
+
# config.check_current_password_before_update = :attributes
|
22
28
|
end
|
@@ -2,7 +2,7 @@ class DeviseTokenAuthCreate<%= user_class.pluralize %> < ActiveRecord::Migration
|
|
2
2
|
def change
|
3
3
|
create_table(:<%= user_class.pluralize.underscore %>) do |t|
|
4
4
|
## Required
|
5
|
-
t.string :provider, :null => false
|
5
|
+
t.string :provider, :null => false, :default => "email"
|
6
6
|
t.string :uid, :null => false, :default => ""
|
7
7
|
|
8
8
|
## Database authenticatable
|
@@ -40,7 +40,7 @@ class DeviseTokenAuthCreate<%= user_class.pluralize %> < ActiveRecord::Migration
|
|
40
40
|
t.string :email
|
41
41
|
|
42
42
|
## Tokens
|
43
|
-
t.text :tokens
|
43
|
+
<%= json_supported_database? ? 't.json :tokens' : 't.text :tokens' %>
|
44
44
|
|
45
45
|
t.timestamps
|
46
46
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Custom::ConfirmationsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
describe Custom::ConfirmationsController do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@redirect_url = Faker::Internet.url
|
9
|
+
@new_user = users(:unconfirmed_email_user)
|
10
|
+
@new_user.send_confirmation_instructions({
|
11
|
+
redirect_url: @redirect_url
|
12
|
+
})
|
13
|
+
@mail = ActionMailer::Base.deliveries.last
|
14
|
+
@token = @mail.body.match(/confirmation_token=([^&]*)&/)[1]
|
15
|
+
@client_config = @mail.body.match(/config=([^&]*)&/)[1]
|
16
|
+
|
17
|
+
get :show, {confirmation_token: @token, redirect_url: @redirect_url}
|
18
|
+
end
|
19
|
+
|
20
|
+
test "yield resource to block on show success" do
|
21
|
+
assert @controller.show_block_called?, "show failed to yield resource to provided block"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Custom::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
|
4
|
+
|
5
|
+
describe Custom::OmniauthCallbacksController do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
OmniAuth.config.test_mode = true
|
9
|
+
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({
|
10
|
+
:provider => 'facebook',
|
11
|
+
:uid => '123545',
|
12
|
+
:info => {
|
13
|
+
name: 'swong',
|
14
|
+
email: 'swongsong@yandex.ru'
|
15
|
+
}
|
16
|
+
})
|
17
|
+
end
|
18
|
+
|
19
|
+
test "yield resource to block on omniauth_sucess success" do
|
20
|
+
@redirect_url = "http://ng-token-auth.dev/"
|
21
|
+
get_via_redirect '/nice_user_auth/facebook', {
|
22
|
+
auth_origin_url: @redirect_url
|
23
|
+
}
|
24
|
+
assert @controller.omniauth_success_block_called?, "omniauth_success failed to yield resource to provided block"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Custom::PasswordsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
describe Custom::PasswordsController do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@resource = users(:confirmed_email_user)
|
9
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
10
|
+
end
|
11
|
+
|
12
|
+
test "yield resource to block on create success" do
|
13
|
+
post :create, {
|
14
|
+
email: @resource.email,
|
15
|
+
redirect_url: @redirect_url
|
16
|
+
}
|
17
|
+
|
18
|
+
@mail = ActionMailer::Base.deliveries.last
|
19
|
+
@resource.reload
|
20
|
+
|
21
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
22
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
23
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
24
|
+
|
25
|
+
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
26
|
+
end
|
27
|
+
|
28
|
+
test "yield resource to block on edit success" do
|
29
|
+
@resource = users(:unconfirmed_email_user)
|
30
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
31
|
+
|
32
|
+
xhr :post, :create, {
|
33
|
+
email: @resource.email,
|
34
|
+
redirect_url: @redirect_url
|
35
|
+
}
|
36
|
+
|
37
|
+
@mail = ActionMailer::Base.deliveries.last
|
38
|
+
@resource.reload
|
39
|
+
|
40
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
41
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
42
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
43
|
+
|
44
|
+
xhr :get, :edit, {
|
45
|
+
reset_password_token: @mail_reset_token,
|
46
|
+
redirect_url: @mail_redirect_url
|
47
|
+
}
|
48
|
+
|
49
|
+
@resource.reload
|
50
|
+
assert @controller.edit_block_called?, "edit failed to yield resource to provided block"
|
51
|
+
end
|
52
|
+
|
53
|
+
test "yield resource to block on update success" do
|
54
|
+
@auth_headers = @resource.create_new_auth_token
|
55
|
+
request.headers.merge!(@auth_headers)
|
56
|
+
@new_password = Faker::Internet.password
|
57
|
+
put :update, {
|
58
|
+
password: @new_password,
|
59
|
+
password_confirmation: @new_password
|
60
|
+
}
|
61
|
+
assert @controller.update_block_called?, "update failed to yield resource to provided block"
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -35,7 +35,7 @@ class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
|
|
35
35
|
|
36
36
|
test "yield resource to block on destroy success" do
|
37
37
|
delete '/nice_user_auth', @auth_headers
|
38
|
-
assert @controller.destroy_block_called?, "
|
38
|
+
assert @controller.destroy_block_called?, "destroy failed to yield resource to provided block"
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Custom::SessionsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
describe Custom::SessionsController do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@existing_user = users(:confirmed_email_user)
|
9
|
+
@existing_user.skip_confirmation!
|
10
|
+
@existing_user.save!
|
11
|
+
end
|
12
|
+
|
13
|
+
test "yield resource to block on create success" do
|
14
|
+
post :create, {
|
15
|
+
email: @existing_user.email,
|
16
|
+
password: 'secret123'
|
17
|
+
}
|
18
|
+
assert @controller.create_block_called?, "create failed to yield resource to provided block"
|
19
|
+
end
|
20
|
+
|
21
|
+
test "yield resource to block on destroy success" do
|
22
|
+
@auth_headers = @existing_user.create_new_auth_token
|
23
|
+
request.headers.merge!(@auth_headers)
|
24
|
+
delete :destroy, format: :json
|
25
|
+
assert @controller.destroy_block_called?, "destroy failed to yield resource to provided block"
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|