diff --git a/ee/app/models/concerns/identity_verifiable.rb b/ee/app/models/concerns/identity_verifiable.rb index 0dfe87dd0b3fbb91811be5c4b7f91c86bf60cef4..6f563d54a7844582dbfa76ad3f07d738aed702d9 100644 --- a/ee/app/models/concerns/identity_verifiable.rb +++ b/ee/app/models/concerns/identity_verifiable.rb @@ -87,10 +87,14 @@ def email_verified? end def credit_card_verification_enabled? - Feature.enabled?(:identity_verification_credit_card) + return false unless is_a?(User) + + Feature.enabled?(:identity_verification_credit_card, self) end def phone_number_verification_enabled? - Feature.enabled?(:identity_verification_phone_number) + return false unless is_a?(User) + + Feature.enabled?(:identity_verification_phone_number, self) end end diff --git a/ee/spec/features/users/identity_verification_spec.rb b/ee/spec/features/users/identity_verification_spec.rb index 87c73f2f59d9f1d48a853b7e7ef99bfa96dd2690..73149ca26bc91809171b7a83e791bcfe91705c7d 100644 --- a/ee/spec/features/users/identity_verification_spec.rb +++ b/ee/spec/features/users/identity_verification_spec.rb @@ -139,7 +139,7 @@ expect(page).to have_current_path(success_identity_verification_path) - stub_feature_flags(identity_verification_credit_card: true) + stub_feature_flags(identity_verification_credit_card: user) sign_out(user) diff --git a/ee/spec/models/concerns/identity_verifiable_spec.rb b/ee/spec/models/concerns/identity_verifiable_spec.rb index 8979c82ead198db33e2640bb5aad6e32b43d1fe5..4d805dab4bdf9b0d16ff0de1014ce5f7f3515ffd 100644 --- a/ee/spec/models/concerns/identity_verifiable_spec.rb +++ b/ee/spec/models/concerns/identity_verifiable_spec.rb @@ -92,6 +92,35 @@ def add_user_risk_band(value) it { is_expected.to eq(result) } end + + context 'when flag is enabled for a specific user' do + let_it_be(:another_user) { create(:user) } + + where(:risk_band, :credit_card, :phone_number, :result) do + 'High' | true | false | %w[credit_card email] + 'Medium' | false | true | %w[phone email] + end + + with_them do + before do + stub_feature_flags( + identity_verification_phone_number: false, + identity_verification_credit_card: false + ) + + add_user_risk_band(risk_band) + create(:user_custom_attribute, key: 'arkose_risk_band', value: risk_band, user: another_user) + + stub_feature_flags(identity_verification_phone_number: user) if phone_number + stub_feature_flags(identity_verification_credit_card: user) if credit_card + end + + it 'only affects that user' do + expect(user.required_identity_verification_methods).to eq(result) + expect(another_user.required_identity_verification_methods).to eq(%w[email]) + end + end + end end describe('#identity_verification_state') do