summaryrefslogtreecommitdiff
path: root/test/controllers/otp_enrollments_controller_test.rb
blob: 3bfab8e39670d84cfd49df59ec580288499a32ff (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
40
41
require "test_helper"

class OtpEnrollmentsControllerTest < ActionController::TestCase
  include AuthenticatedTestHelper
  fixtures :users

  def setup
    login_as :quentin
    @user = users(:quentin)
    User.authenticate("quentin", "monkey") # ensure digest is migrated
  end

  test "create requires the current password" do
    post :create, params: { :current_password => "wrong" }
    assert_nil @user.reload.otp_pending_secret
  end

  test "create with the password begins enrollment" do
    post :create, params: { :current_password => "monkey" }
    assert @user.reload.otp_pending_secret.present?
    assert_redirected_to otp_enrollment_path
  end

  test "update with the first code completes enrollment" do
    @user.begin_otp_enrollment!
    code = ROTP::TOTP.new(@user.reload.otp_pending_secret).now
    put :update, params: { :code => code }
    assert @user.reload.otp_enrolled?
  end

  test "destroy needs password and a current code" do
    @user.update!(:otp_secret => ROTP::Base32.random)

    delete :destroy, params: { :current_password => "monkey", :code => "000000" }
    assert @user.reload.otp_enrolled?

    code = ROTP::TOTP.new(@user.otp_secret).now
    delete :destroy, params: { :current_password => "monkey", :code => code }
    assert_not @user.reload.otp_enrolled?
  end
end