From 82f2d286b2fabde3ae3980060d166a3c7a759544 Mon Sep 17 00:00:00 2001 From: Vraj Mohan Date: Tue, 8 Oct 2024 12:24:48 -0700 Subject: [PATCH 1/3] LG-14397 Remove use_fed_domain_class config changelog: Internal, Configuration, Remove configuration not needed any longer --- app/models/email_address.rb | 7 +- config/application.yml.default | 3 - lib/identity_config.rb | 1 - ...or_authentication_setup_controller_spec.rb | 52 +----- .../piv_recommended_after_sign_in_spec.rb | 167 +++++------------- spec/features/users/sign_up_spec.rb | 92 +++------- spec/models/email_address_spec.rb | 49 ++--- spec/models/user_spec.rb | 17 +- 8 files changed, 105 insertions(+), 283 deletions(-) diff --git a/app/models/email_address.rb b/app/models/email_address.rb index 67c58d9f687..ca3a7b53c01 100644 --- a/app/models/email_address.rb +++ b/app/models/email_address.rb @@ -42,12 +42,7 @@ def fed_or_mil_email? end def fed_email? - if IdentityConfig.store.use_fed_domain_class - return false unless domain - FederalEmailDomain.fed_domain?(domain) - else - email.end_with?('.gov') - end + FederalEmailDomain.fed_domain?(domain) end def mil_email? diff --git a/config/application.yml.default b/config/application.yml.default index e300932af8d..0234275a4db 100644 --- a/config/application.yml.default +++ b/config/application.yml.default @@ -365,7 +365,6 @@ test_ssn_allowed_list: '' totp_code_interval: 30 unauthorized_scope_enabled: false use_dashboard_service_providers: false -use_fed_domain_class: false use_kms: false use_vot_in_sp_requests: true usps_auth_token_refresh_job_enabled: false @@ -450,7 +449,6 @@ development: state_tracking_enabled: true telephony_adapter: test use_dashboard_service_providers: true - use_fed_domain_class: true usps_eipp_sponsor_id: '222222222222222' usps_ipp_sponsor_id: '111111111111111' usps_ipp_transliteration_enabled: true @@ -583,7 +581,6 @@ test: telephony_adapter: test test_ssn_allowed_list: '999999999' totp_code_interval: 3 - use_fed_domain_class: true usps_eipp_sponsor_id: '222222222222222' usps_ipp_root_url: 'http://localhost:1000' usps_ipp_sponsor_id: '111111111111111' diff --git a/lib/identity_config.rb b/lib/identity_config.rb index 36a70f42100..227c5372f2a 100644 --- a/lib/identity_config.rb +++ b/lib/identity_config.rb @@ -424,7 +424,6 @@ def self.store config.add(:usps_auth_token_refresh_job_enabled, type: :boolean) config.add(:usps_confirmation_max_days, type: :integer) config.add(:usps_eipp_sponsor_id, type: :string) - config.add(:use_fed_domain_class, type: :boolean) config.add(:usps_ipp_client_id, type: :string) config.add(:usps_ipp_password, type: :string) config.add(:usps_ipp_request_timeout, type: :integer) diff --git a/spec/controllers/users/two_factor_authentication_setup_controller_spec.rb b/spec/controllers/users/two_factor_authentication_setup_controller_spec.rb index 5672ea37eb6..578cdb6e2dc 100644 --- a/spec/controllers/users/two_factor_authentication_setup_controller_spec.rb +++ b/spec/controllers/users/two_factor_authentication_setup_controller_spec.rb @@ -19,51 +19,19 @@ ) end - context 'with user having gov or mil email and use_fed_domain_class set to false' do - let(:user) do - create(:user, email: 'example@example.gov', piv_cac_recommended_dismissed_at: Time.zone.now) - end + context 'with user having gov or mil email' do let!(:federal_domain) { create(:federal_email_domain, name: 'gsa.gov') } - - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) + let(:user) do + create( + :user, + email: 'example@gsa.gov', + piv_cac_recommended_dismissed_at: interstitial_dismissed_at, + ) end context 'having already visited the PIV interstitial page' do - it 'tracks the visit in analytics' do - get :index - - expect(@analytics).to have_logged_event( - 'User Registration: 2FA Setup visited', - enabled_mfa_methods_count: 0, - gov_or_mil_email: true, - ) - end - end + let(:interstitial_dismissed_at) { Time.zone.now } - context 'directed to page without having visited PIV interstitial page' do - let(:user) do - create(:user, email: 'example@example.gov') - end - - it 'redirects user to piv_recommended_path' do - get :index - - expect(response).to redirect_to(login_piv_cac_recommended_url) - end - end - end - - context 'with user having gov or mil email and use_fed_domain_class set to true' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) - end - - let!(:federal_domain) { create(:federal_email_domain, name: 'gsa.gov') } - let(:user) do - create(:user, email: 'example@gsa.gov', piv_cac_recommended_dismissed_at: Time.zone.now) - end - context 'having already visited the PIV interstitial page' do it 'tracks the visit in analytics' do get :index @@ -76,9 +44,7 @@ end context 'directed to page without having visited PIV interstitial page' do - let(:user) do - create(:user, email: 'example@gsa.gov') - end + let(:interstitial_dismissed_at) { nil } it 'redirects user to piv_recommended_path' do get :index diff --git a/spec/features/sign_in/piv_recommended_after_sign_in_spec.rb b/spec/features/sign_in/piv_recommended_after_sign_in_spec.rb index 2906a36a34e..f22a2d7f02c 100644 --- a/spec/features/sign_in/piv_recommended_after_sign_in_spec.rb +++ b/spec/features/sign_in/piv_recommended_after_sign_in_spec.rb @@ -1,132 +1,63 @@ require 'rails_helper' RSpec.feature 'Piv recommended after Sign in' do - context 'use_fed_domain_class set to true' do - let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } - - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) - end - - scenario 'User with valid fed email directed to recommend page and get to setup piv' do - user = create(:user, :with_phone, { email: 'example@gsa.gov' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) - expect(page).to have_current_path(setup_piv_cac_path) - end - - scenario 'User with mil email directed to recommended PIV page and goes to add piv page' do - user = create(:user, :with_phone, { email: 'example@army.mil' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) - expect(page).to have_current_path(setup_piv_cac_path) - end - - scenario 'User with fed email and skips recommendation page' do - user = create(:user, :with_phone, { email: 'example@gsa.gov' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.skip')) - expect(page).to have_current_path(account_path) - end - - scenario 'User with mil email and skips recommendation page' do - user = create(:user, :with_phone, { email: 'example@army.mil' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.skip')) - expect(page).to have_current_path(account_path) - end - - scenario 'User with invalid .gov email directed to account page' do - user = create(:user, :with_phone, { email: 'example@bad.gov' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(account_path) - end + let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } + + scenario 'User with valid fed email directed to recommend page and get to setup piv' do + user = create(:user, :with_phone, { email: 'example@gsa.gov' }) + + visit new_user_session_path + fill_in_credentials_and_submit(user.email, user.password) + fill_in_code_with_last_phone_otp + click_submit_default + expect(page).to have_current_path(login_piv_cac_recommended_path) + click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) + expect(page).to have_current_path(setup_piv_cac_path) end - context 'use_fed_domain_class set to false' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) - end - scenario 'User with .gov email directed to recommend page and get to setup piv' do - user = create(:user, :with_phone, { email: 'example@good.gov' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) - expect(page).to have_current_path(setup_piv_cac_path) - end + scenario 'User with mil email directed to recommended PIV page and goes to add piv page' do + user = create(:user, :with_phone, { email: 'example@army.mil' }) - scenario 'User with .mil email directed to recommended PIV page and goes to add piv page' do - user = create(:user, :with_phone, { email: 'example@army.mil' }) - - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) - expect(page).to have_current_path(setup_piv_cac_path) - end + visit new_user_session_path + fill_in_credentials_and_submit(user.email, user.password) + fill_in_code_with_last_phone_otp + click_submit_default + expect(page).to have_current_path(login_piv_cac_recommended_path) + click_button(t('two_factor_authentication.piv_cac_upsell.add_piv')) + expect(page).to have_current_path(setup_piv_cac_path) + end - scenario 'User with fed email and skips recommendation page' do - user = create(:user, :with_phone, { email: 'example@example.gov' }) + scenario 'User with fed email and skips recommendation page' do + user = create(:user, :with_phone, { email: 'example@gsa.gov' }) - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.skip')) - expect(page).to have_current_path(account_path) - end + visit new_user_session_path + fill_in_credentials_and_submit(user.email, user.password) + fill_in_code_with_last_phone_otp + click_submit_default + expect(page).to have_current_path(login_piv_cac_recommended_path) + click_button(t('two_factor_authentication.piv_cac_upsell.skip')) + expect(page).to have_current_path(account_path) + end - scenario 'User with mil email and skips recommendation page' do - user = create(:user, :with_phone, { email: 'example@army.mil' }) + scenario 'User with mil email and skips recommendation page' do + user = create(:user, :with_phone, { email: 'example@army.mil' }) - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(login_piv_cac_recommended_path) - click_button(t('two_factor_authentication.piv_cac_upsell.skip')) - expect(page).to have_current_path(account_path) - end + visit new_user_session_path + fill_in_credentials_and_submit(user.email, user.password) + fill_in_code_with_last_phone_otp + click_submit_default + expect(page).to have_current_path(login_piv_cac_recommended_path) + click_button(t('two_factor_authentication.piv_cac_upsell.skip')) + expect(page).to have_current_path(account_path) + end - scenario 'User with invalid no .gov or .mil email directed to account page' do - user = create(:user, :with_phone, { email: 'example@bad.com' }) + scenario 'User with invalid .gov email directed to account page' do + user = create(:user, :with_phone, { email: 'example@bad.gov' }) - visit new_user_session_path - fill_in_credentials_and_submit(user.email, user.password) - fill_in_code_with_last_phone_otp - click_submit_default - expect(page).to have_current_path(account_path) - end + visit new_user_session_path + fill_in_credentials_and_submit(user.email, user.password) + fill_in_code_with_last_phone_otp + click_submit_default + expect(page).to have_current_path(account_path) end end diff --git a/spec/features/users/sign_up_spec.rb b/spec/features/users/sign_up_spec.rb index b6fef7c4ab1..415c6ad78bc 100644 --- a/spec/features/users/sign_up_spec.rb +++ b/spec/features/users/sign_up_spec.rb @@ -512,13 +512,11 @@ def clipboard_text end describe 'User Directed to Piv Cac recommended' do - context 'set config use_fed_domain_class to false' do - let(:email) { 'test@test.gov' } - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) - end + let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } + let(:email) { 'test@gsa.gov' } - it 'should land user on piv cac suggestion page' do + context 'valid fed email' do + it 'should land user on piv cac suggestion page when fed government' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path @@ -547,81 +545,43 @@ def clipboard_text end end - context 'set config use_fed_domain_class to true' do - let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } - let(:email) { 'test@gsa.gov' } - - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) + context 'any mil email' do + let(:email) { 'test@example.mil' } + it 'should land user on piv cac suggestion page when fed government' do + confirm_email(email) + submit_form_with_valid_password + expect(current_path).to eq login_piv_cac_recommended_path end - context 'valid fed email' do - it 'should land user on piv cac suggestion page when fed government' do + + context 'user can skip piv cac prompt' do + it 'should skip piv cac prompt and land on mfa screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path - end - - context 'user can skip piv cac prompt' do - it 'should skip piv cac prompt and land on mfa screen' do - confirm_email(email) - submit_form_with_valid_password - expect(current_path).to eq login_piv_cac_recommended_path - click_button t('two_factor_authentication.piv_cac_upsell.choose_other_method') - - expect(current_path).to eq authentication_methods_setup_path - end - end - - context 'user who selects to add piv is directed to piv screen' do - it 'should be directed straight to piv add screen' do - confirm_email(email) - submit_form_with_valid_password - expect(current_path).to eq login_piv_cac_recommended_path - click_button t('two_factor_authentication.piv_cac_upsell.add_piv') + click_button t('two_factor_authentication.piv_cac_upsell.choose_other_method') - expect(current_path).to eq setup_piv_cac_path - end + expect(current_path).to eq authentication_methods_setup_path end end - context 'any mil email' do - let(:email) { 'test@example.mil' } - it 'should land user on piv cac suggestion page when fed government' do + context 'user who selects to add piv is directed to piv screen' do + it 'should be directed straight to piv add screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path - end - - context 'user can skip piv cac prompt' do - it 'should skip piv cac prompt and land on mfa screen' do - confirm_email(email) - submit_form_with_valid_password - expect(current_path).to eq login_piv_cac_recommended_path - click_button t('two_factor_authentication.piv_cac_upsell.choose_other_method') - - expect(current_path).to eq authentication_methods_setup_path - end - end - - context 'user who selects to add piv is directed to piv screen' do - it 'should be directed straight to piv add screen' do - confirm_email(email) - submit_form_with_valid_password - expect(current_path).to eq login_piv_cac_recommended_path - click_button t('two_factor_authentication.piv_cac_upsell.add_piv') + click_button t('two_factor_authentication.piv_cac_upsell.add_piv') - expect(current_path).to eq setup_piv_cac_path - end + expect(current_path).to eq setup_piv_cac_path end end + end - context 'invalid fed email' do - let(:email) { 'test@example.gov' } - it 'should land user on piv cac suggestion page when fed government' do - confirm_email(email) - submit_form_with_valid_password - expect(current_path).to eq authentication_methods_setup_path - end + context 'invalid fed email' do + let(:email) { 'test@example.gov' } + it 'should land user on piv cac suggestion page when fed government' do + confirm_email(email) + submit_form_with_valid_password + expect(current_path).to eq authentication_methods_setup_path end end end diff --git a/spec/models/email_address_spec.rb b/spec/models/email_address_spec.rb index eb9b3f9f0d1..a74758d3aee 100644 --- a/spec/models/email_address_spec.rb +++ b/spec/models/email_address_spec.rb @@ -92,51 +92,36 @@ describe '#fed_or_mil_email?' do subject(:result) { email_address.fed_or_mil_email? } - context 'with an email domain that is a fed email' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) - end - let(:email) { 'example@example.gov' } + context 'with an email that is in federal_email_domains' do + let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } + let(:email) { 'example@gsa.gov' } it { expect(result).to eq(true) } end - context 'with an email that is a mil email' do + context 'with an email that has a .mil TLD' do let(:email) { 'example@example.mil' } it { expect(result).to eq(true) } end - context 'with an email that is not a mil or fed email' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) - end - + context 'with an email that is neither in federal_email_domains nor has a .mil TLD' do let(:email) { 'example@bad.gov' } it { expect(result).to eq(false) } end - - context 'with a non fed email while use_fed_domain_class set to true' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) - end - let(:email) { 'example@good.gov' } - - it { expect(result).to eq(false) } - end end describe '#mil_email?' do subject(:result) { email_address.mil_email? } - context 'with an email domain not a mil email' do + context 'with an email that does not have a .mil TLD' do let(:email) { 'example@example.gov' } it { expect(result).to eq(false) } end - context 'with an email domain ending in a mil domain email' do + context 'with an email that has a .mil TLD' do let(:email) { 'example@example.mil' } it { expect(result).to eq(true) } @@ -165,22 +150,16 @@ subject(:result) { email_address.fed_email? } let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } - context 'use_fed_domain_class set to true' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(true) - end - - context 'with an email domain not a fed email' do - let(:email) { 'example@bad.gov' } + context 'with an email domain that is not in federal_email_domains' do + let(:email) { 'example@bad.gov' } - it { expect(result).to eq(false) } - end + it { expect(result).to eq(false) } + end - context 'with an email domain ending in a fed domain email' do - let(:email) { 'example@gsa.gov' } + context 'with an email domain that is in federal_email_domains' do + let(:email) { 'example@gsa.gov' } - it { expect(result).to eq(true) } - end + it { expect(result).to eq(true) } end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 387260dace3..94c77ed8f6c 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1695,24 +1695,19 @@ def it_should_not_send_survey end describe '#has_fed_or_mil_email?' do - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) - end + let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } - context 'with a valid fed email in domain file' do - let(:user) { create(:user, email: 'example@example.gov') } + context 'with an email in federal_email_domains' do + let(:user) { create(:user, email: 'example@gsa.gov') } it 'should return true' do expect(user.has_fed_or_mil_email?).to eq(true) end end - context 'with use_fed_domain_class set to false and random .gov email' do + context 'with an email not in federal_email_domains' do let(:user) { create(:user, email: 'example@example.gov') } - before do - allow(IdentityConfig.store).to receive(:use_fed_domain_class).and_return(false) - end - it 'should return true' do - expect(user.has_fed_or_mil_email?).to eq(true) + it 'should return false' do + expect(user.has_fed_or_mil_email?).to eq(false) end end From 051f892f4c65a6193640e9b2f201de9ec7df59b8 Mon Sep 17 00:00:00 2001 From: Vraj Mohan Date: Tue, 8 Oct 2024 13:30:18 -0700 Subject: [PATCH 2/3] Fix incorrect example description Make the example descriptions consistent --- spec/features/users/sign_up_spec.rb | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/spec/features/users/sign_up_spec.rb b/spec/features/users/sign_up_spec.rb index 415c6ad78bc..7dad8caa392 100644 --- a/spec/features/users/sign_up_spec.rb +++ b/spec/features/users/sign_up_spec.rb @@ -515,15 +515,15 @@ def clipboard_text let!(:federal_email_domain) { create(:federal_email_domain, name: 'gsa.gov') } let(:email) { 'test@gsa.gov' } - context 'valid fed email' do - it 'should land user on piv cac suggestion page when fed government' do + context 'when the user has a fed email' do + it 'should land user on piv cac suggestion page' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path end - context 'user can skip piv cac prompt' do - it 'should skip piv cac prompt and land on mfa screen' do + context 'when the user chooses to skip adding piv' do + it 'should land on mfa screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path @@ -533,8 +533,8 @@ def clipboard_text end end - context 'user who selects to add piv is directed to piv screen' do - it 'should be directed straight to piv add screen' do + context 'when the user chooses to add piv' do + it 'should land on piv add screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path @@ -545,16 +545,16 @@ def clipboard_text end end - context 'any mil email' do + context 'when the user has a mil email' do let(:email) { 'test@example.mil' } - it 'should land user on piv cac suggestion page when fed government' do + it 'should land user on piv cac suggestion page' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path end - context 'user can skip piv cac prompt' do - it 'should skip piv cac prompt and land on mfa screen' do + context 'when the user chooses to skip adding piv' do + it 'should land on mfa screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path @@ -564,8 +564,8 @@ def clipboard_text end end - context 'user who selects to add piv is directed to piv screen' do - it 'should be directed straight to piv add screen' do + context 'when the user chooses to add piv' do + it 'should land on piv add screen' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq login_piv_cac_recommended_path @@ -576,9 +576,9 @@ def clipboard_text end end - context 'invalid fed email' do + context 'when the user does not have a fed or mil email' do let(:email) { 'test@example.gov' } - it 'should land user on piv cac suggestion page when fed government' do + it 'should skip piv cac recommendation page' do confirm_email(email) submit_form_with_valid_password expect(current_path).to eq authentication_methods_setup_path From da9b15124e8def2276de3f141f3524f66a4be5b2 Mon Sep 17 00:00:00 2001 From: Vraj Mohan Date: Wed, 9 Oct 2024 06:44:55 -0700 Subject: [PATCH 3/3] Add test for "email addresses" wihout domains --- spec/models/email_address_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/models/email_address_spec.rb b/spec/models/email_address_spec.rb index a74758d3aee..764d2afc148 100644 --- a/spec/models/email_address_spec.rb +++ b/spec/models/email_address_spec.rb @@ -161,5 +161,11 @@ it { expect(result).to eq(true) } end + + context 'with a bad email address that has no domain' do + let(:email) { 'email_with_no_domain' } + + it { expect(result).to eq(false) } + end end end