summaryrefslogtreecommitdiff
path: root/test/controllers/otp_enrollments_controller_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/controllers/otp_enrollments_controller_test.rb')
-rw-r--r--test/controllers/otp_enrollments_controller_test.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/controllers/otp_enrollments_controller_test.rb b/test/controllers/otp_enrollments_controller_test.rb
new file mode 100644
index 00000000..3bfab8e3
--- /dev/null
+++ b/test/controllers/otp_enrollments_controller_test.rb
@@ -0,0 +1,41 @@
1require "test_helper"
2
3class OtpEnrollmentsControllerTest < ActionController::TestCase
4 include AuthenticatedTestHelper
5 fixtures :users
6
7 def setup
8 login_as :quentin
9 @user = users(:quentin)
10 User.authenticate("quentin", "monkey") # ensure digest is migrated
11 end
12
13 test "create requires the current password" do
14 post :create, params: { :current_password => "wrong" }
15 assert_nil @user.reload.otp_pending_secret
16 end
17
18 test "create with the password begins enrollment" do
19 post :create, params: { :current_password => "monkey" }
20 assert @user.reload.otp_pending_secret.present?
21 assert_redirected_to otp_enrollment_path
22 end
23
24 test "update with the first code completes enrollment" do
25 @user.begin_otp_enrollment!
26 code = ROTP::TOTP.new(@user.reload.otp_pending_secret).now
27 put :update, params: { :code => code }
28 assert @user.reload.otp_enrolled?
29 end
30
31 test "destroy needs password and a current code" do
32 @user.update!(:otp_secret => ROTP::Base32.random)
33
34 delete :destroy, params: { :current_password => "monkey", :code => "000000" }
35 assert @user.reload.otp_enrolled?
36
37 code = ROTP::TOTP.new(@user.otp_secret).now
38 delete :destroy, params: { :current_password => "monkey", :code => code }
39 assert_not @user.reload.otp_enrolled?
40 end
41end