two_factor_authentications_controller_spec.rb 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. require 'webauthn/fake_client'
  4. describe Admin::Users::TwoFactorAuthenticationsController do
  5. render_views
  6. let(:user) { Fabricate(:user) }
  7. before do
  8. sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
  9. end
  10. describe 'DELETE #destroy' do
  11. context 'when user has OTP enabled' do
  12. before do
  13. user.update(otp_required_for_login: true)
  14. end
  15. it 'redirects to admin account page' do
  16. delete :destroy, params: { user_id: user.id }
  17. user.reload
  18. expect(user.otp_enabled?).to be false
  19. expect(response).to redirect_to(admin_account_path(user.account_id))
  20. end
  21. end
  22. context 'when user has OTP and WebAuthn enabled' do
  23. let(:fake_client) { WebAuthn::FakeClient.new('http://test.host') }
  24. before do
  25. user.update(otp_required_for_login: true, webauthn_id: WebAuthn.generate_user_id)
  26. public_key_credential = WebAuthn::Credential.from_create(fake_client.create)
  27. Fabricate(:webauthn_credential,
  28. user_id: user.id,
  29. external_id: public_key_credential.id,
  30. public_key: public_key_credential.public_key,
  31. nickname: 'Security Key')
  32. end
  33. it 'redirects to admin account page' do
  34. delete :destroy, params: { user_id: user.id }
  35. user.reload
  36. expect(user.otp_enabled?).to be false
  37. expect(user.webauthn_enabled?).to be false
  38. expect(response).to redirect_to(admin_account_path(user.account_id))
  39. end
  40. end
  41. end
  42. end