Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add feature flag for Max CFI service switch and tests #20160

Merged
merged 5 commits into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/models/form_profiles/va_526ez.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def initialize_rated_disabilities_information
)
invoker = 'FormProfiles::VA526ez#initialize_rated_disabilities_information'
response = api_provider.get_rated_disabilities(nil, nil, { invoker: })
ClaimFastTracking::MaxRatingAnnotator.annotate_disabilities(response)
ClaimFastTracking::MaxRatingAnnotator.annotate_disabilities(response, user)

# Remap response object to schema fields
VA526ez::FormRatedDisabilities.new(
Expand Down
17 changes: 11 additions & 6 deletions app/services/claim_fast_tracking/max_rating_annotator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module ClaimFastTracking
class MaxRatingAnnotator
EXCLUDED_DIGESTIVE_CODES = [7318, 7319, 7327, 7336, 7346].freeze

def self.annotate_disabilities(rated_disabilities_response)
def self.annotate_disabilities(rated_disabilities_response, user)
return if rated_disabilities_response.rated_disabilities.blank?

log_hyphenated_diagnostic_codes(rated_disabilities_response.rated_disabilities)
Expand All @@ -17,7 +17,7 @@ def self.annotate_disabilities(rated_disabilities_response)
.map(&:diagnostic_code) # map to diagnostic_code field in rating
return rated_disabilities_response if diagnostic_codes.empty?

ratings = get_ratings(diagnostic_codes)
ratings = get_ratings(diagnostic_codes, user)
return rated_disabilities_response unless ratings

ratings_hash = ratings.to_h { |rating| [rating['diagnostic_code'], rating['max_rating']] }
Expand Down Expand Up @@ -54,10 +54,15 @@ def self.diagnostic_code_type(rated_disability)
end
end

def self.get_ratings(diagnostic_codes)
vro_client = VirtualRegionalOffice::Client.new
response = vro_client.get_max_rating_for_diagnostic_codes(diagnostic_codes)
response.body['ratings']
def self.get_ratings(diagnostic_codes, user)
if Flipper.enabled?(:disability_526_max_cfi_service_switch, user)
Rails.logger.info('New Max Ratings service triggered by feature flag, but implementation is pending')
# TODO: Handle the new logic for max ratings when switching to the new service
else
vro_client = VirtualRegionalOffice::Client.new
response = vro_client.get_max_rating_for_diagnostic_codes(diagnostic_codes)
response.body['ratings']
end
rescue Common::Client::Errors::ClientError => e
Rails.logger.error "Get Max Ratings Failed #{e.message}.", backtrace: e.backtrace
nil
Expand Down
3 changes: 3 additions & 0 deletions config/features.yml
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,9 @@ features:
actor_type: user
description: Enables the migration of contention classification service from VRO to the VA.gov infrastructure.
enable_in_development: true
disability_526_max_cfi_service_switch:
actor_type: user
description: Enables the use of the new Max Ratings CFI service instead of the VRO client for fetching max ratings.
disability_compensation_flashes:
actor_type: user
description: enables sending flashes to BGS for disability_compensation submissions.
Expand Down
57 changes: 56 additions & 1 deletion spec/services/claim_fast_tracking/max_rating_annotator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@

RSpec.describe ClaimFastTracking::MaxRatingAnnotator do
describe 'annotate_disabilities' do
subject { described_class.annotate_disabilities(disabilities_response) }
subject { described_class.annotate_disabilities(disabilities_response, user) }

let(:user) { FactoryBot.create(:user, :loa3) }
let(:disabilities_response) do
DisabilityCompensation::ApiProvider::RatedDisabilitiesResponse.new(rated_disabilities:)
end
Expand All @@ -21,6 +22,10 @@
]
end

before do
allow(Flipper).to receive(:enabled?).with(:disability_526_max_cfi_service_switch, user).and_return(false)
end

context 'when a disabilities response does not contains rating any disability' do
it 'mutates none of the disabilities with a max rating' do
VCR.use_cassette('virtual_regional_office/max_ratings_none') do
Expand Down Expand Up @@ -204,4 +209,54 @@
it { is_expected.to be_truthy }
end
end

describe 'get ratings' do
let(:diagnostic_codes) { [6260, 7347, 6516] }
let(:user) { FactoryBot.create(:user, :loa3) }

context 'when the feature flag disability_526_max_cfi_service_switch is enabled' do
before do
allow(Flipper).to receive(:enabled?).with(:disability_526_max_cfi_service_switch, user).and_return(true)
end

it 'logs a message indicating the new service is used' do
expect(Rails.logger).to receive(:info).with(
'New Max Ratings service triggered by feature flag, but implementation is pending'
)
described_class.send(:get_ratings, diagnostic_codes, user)
end
end

context 'when the feature flag disability_526_max_cfi_service_switch is disabled' do
before do
allow(Flipper).to receive(:enabled?).with(:disability_526_max_cfi_service_switch, user).and_return(false)
end

it 'calls the VRO client to fetch max ratings' do
vro_client = instance_double(VirtualRegionalOffice::Client)
response = double('response', body: { 'ratings' => [10, 20, 30] })

allow(VirtualRegionalOffice::Client).to receive(:new).and_return(vro_client)
allow(vro_client).to receive(:get_max_rating_for_diagnostic_codes).with(diagnostic_codes).and_return(response)

result = described_class.send(:get_ratings, diagnostic_codes, user)
expect(result).to eq([10, 20, 30])
end

it 'logs an error when the VRO client raises a ClientError' do
vro_client = instance_double(VirtualRegionalOffice::Client)
allow(VirtualRegionalOffice::Client).to receive(:new).and_return(vro_client)
allow(vro_client).to receive(:get_max_rating_for_diagnostic_codes).and_raise(
Common::Client::Errors::ClientError.new('Miserably')
)
expect(Rails.logger).to receive(:error).with(
'Get Max Ratings Failed Miserably.',
hash_including(:backtrace)
)

result = described_class.send(:get_ratings, diagnostic_codes, user)
expect(result).to be_nil
end
end
end
end
Loading