From db040a0baa13fdf752d069794fbade81d6d78d3d Mon Sep 17 00:00:00 2001 From: Jack Cody Date: Thu, 27 Jul 2023 16:00:36 -0500 Subject: [PATCH 1/3] Add test [skip changelog] --- .../backup_code_verification_form_spec.rb | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 spec/forms/backup_code_verification_form_spec.rb diff --git a/spec/forms/backup_code_verification_form_spec.rb b/spec/forms/backup_code_verification_form_spec.rb new file mode 100644 index 00000000000..d16f7d8e3da --- /dev/null +++ b/spec/forms/backup_code_verification_form_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe BackupCodeVerificationForm do + let(:form) { described_class.new(user) } + let(:user) { create(:user, :fully_registered) } + let(:backup_codes) do + BackupCodeGenerator.new(user).create + end + let(:params) do + { + backup_code: code, + } + end + let(:result) { form.submit(params) } + + describe '#submit' do + context 'with a valid backup code' do + let(:code) { backup_codes.first } + + it 'returns succcess' do + expect(result.success?).to eq(true) + end + end + + context 'with an invalid backup code' do + let(:code) { 'invalid' } + + it 'returns failure' do + expect(result.success?).to eq(false) + end + end + end +end From 28e055155b6bf84ec014290ca654d68a6eee135a Mon Sep 17 00:00:00 2001 From: Jack Cody Date: Thu, 27 Jul 2023 18:04:52 -0500 Subject: [PATCH 2/3] Add additional tests --- spec/forms/backup_code_verification_form_spec.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/spec/forms/backup_code_verification_form_spec.rb b/spec/forms/backup_code_verification_form_spec.rb index d16f7d8e3da..f6532b60744 100644 --- a/spec/forms/backup_code_verification_form_spec.rb +++ b/spec/forms/backup_code_verification_form_spec.rb @@ -11,14 +11,26 @@ backup_code: code, } end - let(:result) { form.submit(params) } + subject(:result) { form.submit(params) } describe '#submit' do context 'with a valid backup code' do let(:code) { backup_codes.first } + let(:backup_code_config) do + BackupCodeConfiguration.find_with_code(code: code, user_id: user.id) + end it 'returns succcess' do expect(result.success?).to eq(true) + expect(result.extra[:multi_factor_auth_method]).to eq('backup_code') + expect(result.extra[:multi_factor_auth_method_created_at]). + to eq(backup_code_config.created_at) + end + + it 'marks code as used' do + subject + + expect(backup_code_config.reload.used_at).not_to eq(nil) end end From 65ba2ce336e11fc8fe024d94e0abfe083e0344a8 Mon Sep 17 00:00:00 2001 From: Jack Cody Date: Fri, 28 Jul 2023 14:43:18 -0500 Subject: [PATCH 3/3] Add refactor --- .../backup_code_verification_form_spec.rb | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/spec/forms/backup_code_verification_form_spec.rb b/spec/forms/backup_code_verification_form_spec.rb index f6532b60744..1fe95724b75 100644 --- a/spec/forms/backup_code_verification_form_spec.rb +++ b/spec/forms/backup_code_verification_form_spec.rb @@ -1,44 +1,56 @@ require 'rails_helper' RSpec.describe BackupCodeVerificationForm do - let(:form) { described_class.new(user) } - let(:user) { create(:user, :fully_registered) } - let(:backup_codes) do - BackupCodeGenerator.new(user).create - end - let(:params) do - { - backup_code: code, - } + subject(:result) { described_class.new(user).submit(params).to_h } + + let(:user) { create(:user) } + let(:backup_codes) { BackupCodeGenerator.new(user).create } + let(:backup_code_config) do + BackupCodeConfiguration.find_with_code(code: code, user_id: user.id) end - subject(:result) { form.submit(params) } describe '#submit' do + let(:params) do + { + backup_code: code, + } + end + context 'with a valid backup code' do let(:code) { backup_codes.first } - let(:backup_code_config) do - BackupCodeConfiguration.find_with_code(code: code, user_id: user.id) + let(:expected_response) do + { + success: true, + errors: {}, + multi_factor_auth_method: 'backup_code', + multi_factor_auth_method_created_at: backup_code_config.created_at, + } end it 'returns succcess' do - expect(result.success?).to eq(true) - expect(result.extra[:multi_factor_auth_method]).to eq('backup_code') - expect(result.extra[:multi_factor_auth_method_created_at]). - to eq(backup_code_config.created_at) + expect(result).to eq(expected_response) end it 'marks code as used' do - subject - - expect(backup_code_config.reload.used_at).not_to eq(nil) + expect { subject }.to change { + backup_code_config.reload.used_at + }.from(nil).to kind_of(Time) end end context 'with an invalid backup code' do let(:code) { 'invalid' } + let(:expected_response) do + { + success: false, + errors: {}, + multi_factor_auth_method: 'backup_code', + multi_factor_auth_method_created_at: nil, + } + end it 'returns failure' do - expect(result.success?).to eq(false) + expect(result).to eq(expected_response) end end end