@@ -4,8 +4,9 @@ class Users::SessionsControllerTest < ActionController::TestCase
44 include Devise ::Test ::ControllerHelpers
55 include ApplicationHelper
66
7+ setup :set_mapping
8+
79 test 'should sign in with 2fa backup code' do
8- @request . env [ 'devise.mapping' ] = Devise . mappings [ :user ]
910 Users ::SessionsController . first_factor << users ( :enabled_2fa ) . id
1011
1112 try_verify_2fa_code ( users ( :enabled_2fa ) )
@@ -18,7 +19,6 @@ class Users::SessionsControllerTest < ActionController::TestCase
1819 end
1920
2021 test 'should remember users with 2FA if requested' do
21- @request . env [ 'devise.mapping' ] = Devise . mappings [ :user ]
2222 Users ::SessionsController . first_factor << users ( :enabled_2fa ) . id
2323
2424 try_verify_2fa_code ( users ( :enabled_2fa ) , remember_me : true )
@@ -28,9 +28,26 @@ class Users::SessionsControllerTest < ActionController::TestCase
2828 assert @controller . remember_me_is_active? ( current_user )
2929 end
3030
31+ test 'should redirect users with code-based 2FA to code verification' do
32+ pass = 'temp password for testing manual 2FA signin'
33+ user = users ( :enabled_2fa )
34+ user . update! ( password : pass )
35+
36+ post :create , params : { user : { email : user . email , password : pass } }
37+
38+ assert_response ( :found )
39+ assert_nil flash [ :notice ]
40+ assert_redirected_to ( login_verify_2fa_path ( uid : user . id , remember_me : false ) )
41+ end
42+
3143 private
3244
33- # @param user [User] user to very code for
45+ def set_mapping
46+ @request . env [ 'devise.mapping' ] = Devise . mappings [ :user ]
47+ end
48+
49+ # @param user [User] user to verify code for
50+ # @param opts [Hash] options hash - any additional optional params to merge in
3451 def try_verify_2fa_code ( user , **opts )
3552 post :verify_code , params : { uid : user . id , code : 'M8lENyehyCvo9F9MbyTl1aOL' } . merge ( opts )
3653 end
0 commit comments