blob: 470e84a2021a36d71f446de20cb1e2d151e62819 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
require "test_helper"
class OtpChallengesControllerTest < ActionController::TestCase
fixtures :users
def setup
@user = users(:quentin)
@user.update!(:otp_secret => ROTP::Base32.random)
@request.session[:pending_otp_user_id] = @user.id
@request.session[:otp_deadline] = 2.minutes.from_now.to_i
@request.session[:otp_attempts] = 0
end
test "a valid code completes the login" do
post :create, params: { :code => ROTP::TOTP.new(@user.otp_secret).now }
assert_equal @user.id, session[:user_id]
assert_nil session[:pending_otp_user_id]
end
test "a wrong code does not log in" do
post :create, params: { :code => "000000" }
assert_nil session[:user_id]
assert_response :success
end
test "the pending window expires" do
@request.session[:otp_deadline] = 1.minute.ago.to_i
post :create, params: { :code => ROTP::TOTP.new(@user.otp_secret).now }
assert_nil session[:user_id]
assert_redirected_to login_path
end
test "attempts are limited" do
5.times { post :create, params: { :code => "000000" } }
post :create, params: { :code => ROTP::TOTP.new(@user.otp_secret).now }
assert_nil session[:user_id]
assert_redirected_to login_path
end
end
|