Skip to content

Commit fb7a24a

Browse files
authored
Add tests for passwords#edit when redirect_whitelist is set (#1247)
1 parent 1fbcf89 commit fb7a24a

File tree

1 file changed

+74
-64
lines changed

1 file changed

+74
-64
lines changed

test/controllers/devise_token_auth/passwords_controller_test.rb

Lines changed: 74 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
6565

6666
describe 'for edit' do
6767
before do
68-
@auth_headers = @resource.create_new_auth_token
69-
@new_password = Faker::Internet.password
70-
71-
put :edit,
72-
params: { email: 'chester@cheet.ah' }
68+
get_reset_token
69+
get :edit, params: { reset_password_token: @mail_reset_token}
7370
@data = JSON.parse(response.body)
7471
end
7572

@@ -361,8 +358,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
361358

362359
describe 'Using redirect_whitelist' do
363360
before do
364-
@resource = create(:user, :confirmed)
365-
@good_redirect_url = Faker::Internet.url
361+
@good_redirect_url = @redirect_url
366362
@bad_redirect_url = Faker::Internet.url
367363
DeviseTokenAuth.redirect_whitelist = [@good_redirect_url]
368364
end
@@ -371,31 +367,65 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
371367
DeviseTokenAuth.redirect_whitelist = nil
372368
end
373369

374-
test 'request to whitelisted redirect should be successful' do
375-
post :create,
376-
params: { email: @resource.email,
377-
redirect_url: @good_redirect_url }
370+
describe 'for create' do
371+
test 'request to whitelisted redirect should be successful' do
372+
post :create,
373+
params: { email: @resource.email,
374+
redirect_url: @good_redirect_url }
378375

379-
assert_equal 200, response.status
380-
end
376+
assert_equal 200, response.status
377+
end
381378

382-
test 'request to non-whitelisted redirect should fail' do
383-
post :create,
384-
params: { email: @resource.email,
385-
redirect_url: @bad_redirect_url }
379+
test 'request to non-whitelisted redirect should fail' do
380+
post :create,
381+
params: { email: @resource.email,
382+
redirect_url: @bad_redirect_url }
386383

387-
assert_equal 422, response.status
384+
assert_equal 422, response.status
385+
end
386+
387+
test 'request to non-whitelisted redirect should return error message' do
388+
post :create,
389+
params: { email: @resource.email,
390+
redirect_url: @bad_redirect_url }
391+
392+
@data = JSON.parse(response.body)
393+
assert @data['errors']
394+
assert_equal @data['errors'],
395+
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
396+
redirect_url: @bad_redirect_url)]
397+
end
388398
end
389-
test 'request to non-whitelisted redirect should return error message' do
390-
post :create,
391-
params: { email: @resource.email,
392-
redirect_url: @bad_redirect_url }
393399

394-
@data = JSON.parse(response.body)
395-
assert @data['errors']
396-
assert_equal @data['errors'],
397-
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
398-
redirect_url: @bad_redirect_url)]
400+
describe 'for edit' do
401+
before do
402+
@auth_headers = @resource.create_new_auth_token
403+
@new_password = Faker::Internet.password
404+
405+
get_reset_token
406+
end
407+
408+
test 'request to whitelisted redirect should be successful' do
409+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @good_redirect_url }
410+
411+
assert_equal 302, response.status
412+
end
413+
414+
test 'request to non-whitelisted redirect should fail' do
415+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @bad_redirect_url }
416+
417+
assert_equal 422, response.status
418+
end
419+
420+
test 'request to non-whitelisted redirect should return error message' do
421+
get :edit, params: { reset_password_token: @mail_reset_token, redirect_url: @bad_redirect_url }
422+
423+
@data = JSON.parse(response.body)
424+
assert @data['errors']
425+
assert_equal @data['errors'],
426+
[I18n.t('devise_token_auth.passwords.not_allowed_redirect_url',
427+
redirect_url: @bad_redirect_url)]
428+
end
399429
end
400430
end
401431

@@ -565,16 +595,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
565595
before do
566596
@resource = create(:mang_user, :confirmed)
567597
@redirect_url = 'http://ng-token-auth.dev'
568-
569-
post :create, params: { email: @resource.email,
570-
redirect_url: @redirect_url }
571-
572-
@mail = ActionMailer::Base.deliveries.last
573-
@resource.reload
574-
575-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
576-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
577-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
598+
get_reset_token
578599
end
579600

580601
test 'response should return success status' do
@@ -593,15 +614,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
593614
@resource = create(:user)
594615
@redirect_url = 'http://ng-token-auth.dev'
595616

596-
post :create, params: { email: @resource.email,
597-
redirect_url: @redirect_url }
598-
599-
@mail = ActionMailer::Base.deliveries.last
600-
@resource.reload
601-
602-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
603-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
604-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
617+
get_reset_token
605618

606619
get :edit, params: { reset_password_token: @mail_reset_token,
607620
redirect_url: @mail_redirect_url }
@@ -621,17 +634,8 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
621634

622635
before do
623636
@resource = unconfirmable_users(:user)
624-
@redirect_url = 'http://ng-token-auth.dev'
625637

626-
post :create, params: { email: @resource.email,
627-
redirect_url: @redirect_url }
628-
629-
@mail = ActionMailer::Base.deliveries.last
630-
@resource.reload
631-
632-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
633-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
634-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
638+
get_reset_token
635639

636640
get :edit, params: { reset_password_token: @mail_reset_token,
637641
redirect_url: @mail_redirect_url }
@@ -646,21 +650,27 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
646650
@redirect_url = 'http://ng-token-auth.dev'
647651
@config_name = 'altUser'
648652

649-
post :create, params: { email: @resource.email,
653+
params = { email: @resource.email,
650654
redirect_url: @redirect_url,
651655
config_name: @config_name }
652-
653-
@mail = ActionMailer::Base.deliveries.last
654-
@resource.reload
655-
656-
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
657-
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
658-
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
656+
get_reset_token params
659657
end
660658

661659
test 'config_name param is included in the confirmation email link' do
662660
assert_equal @config_name, @mail_config_name
663661
end
664662
end
663+
664+
def get_reset_token(params = nil)
665+
params ||= { email: @resource.email, redirect_url: @redirect_url }
666+
post :create, params: params
667+
668+
@mail = ActionMailer::Base.deliveries.last
669+
@resource.reload
670+
671+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
672+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
673+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
674+
end
665675
end
666676
end

0 commit comments

Comments
 (0)