From e76f788e659ddb5305bb63774c7935862bef32a3 Mon Sep 17 00:00:00 2001 From: Khoa Nguyen <134089461+Khoa-V-Nguyen@users.noreply.github.com> Date: Thu, 25 Apr 2024 18:09:58 -0600 Subject: [PATCH] Update `Inquiries::Retriever` and `Correspondences::Retriever` (#16512) Co-authored-by: khoa-v-nguyen --- .../app/lib/ask_va_api/base_retriever.rb | 6 +----- .../ask_va_api/correspondences/retriever.rb | 8 ++++++- .../app/lib/ask_va_api/inquiries/retriever.rb | 10 +++++++-- .../correspondences/retriever_spec.rb | 19 +++++++---------- .../ask_va_api/inquiries/retriever_spec.rb | 21 +++++++------------ .../spec/requests/v0/inquiries_spec.rb | 17 +++------------ 6 files changed, 33 insertions(+), 48 deletions(-) diff --git a/modules/ask_va_api/app/lib/ask_va_api/base_retriever.rb b/modules/ask_va_api/app/lib/ask_va_api/base_retriever.rb index 1b7b678f4e4..67aca9997d0 100644 --- a/modules/ask_va_api/app/lib/ask_va_api/base_retriever.rb +++ b/modules/ask_va_api/app/lib/ask_va_api/base_retriever.rb @@ -10,11 +10,7 @@ def initialize(user_mock_data:, entity_class:) end def call - if fetch_data.is_a?(Array) - fetch_data.map { |item| entity_class.new(item) } - else - entity_class.new(fetch_data) - end + fetch_data.map { |item| entity_class.new(item) } rescue => e ::ErrorHandler.handle_service_error(e) end diff --git a/modules/ask_va_api/app/lib/ask_va_api/correspondences/retriever.rb b/modules/ask_va_api/app/lib/ask_va_api/correspondences/retriever.rb index b8750126ba0..fb3ec22b198 100644 --- a/modules/ask_va_api/app/lib/ask_va_api/correspondences/retriever.rb +++ b/modules/ask_va_api/app/lib/ask_va_api/correspondences/retriever.rb @@ -43,7 +43,13 @@ def filter_data(data) end def handle_response_data(response) - response[:Data].presence || response + case response + when Hash + response[:Data] + else + error = JSON.parse(response.body, symbolize_names: true) + error[:Message] + end end end end diff --git a/modules/ask_va_api/app/lib/ask_va_api/inquiries/retriever.rb b/modules/ask_va_api/app/lib/ask_va_api/inquiries/retriever.rb index 1ebc679f679..69ad8a622d9 100644 --- a/modules/ask_va_api/app/lib/ask_va_api/inquiries/retriever.rb +++ b/modules/ask_va_api/app/lib/ask_va_api/inquiries/retriever.rb @@ -45,7 +45,7 @@ def fetch_correspondences(inquiry_id:) ).call case correspondences - when Hash + when String [] else correspondences @@ -64,7 +64,13 @@ def filter_data(data, id = nil) end def handle_response_data(response) - response[:Data].presence || raise(InquiriesRetrieverError, response) + case response + when Hash + response[:Data] + else + error = JSON.parse(response.body, symbolize_names: true) + raise(InquiriesRetrieverError, error[:Message]) + end end end end diff --git a/modules/ask_va_api/spec/app/lib/ask_va_api/correspondences/retriever_spec.rb b/modules/ask_va_api/spec/app/lib/ask_va_api/correspondences/retriever_spec.rb index 61b84f11798..7fe9a7f3b24 100644 --- a/modules/ask_va_api/spec/app/lib/ask_va_api/correspondences/retriever_spec.rb +++ b/modules/ask_va_api/spec/app/lib/ask_va_api/correspondences/retriever_spec.rb @@ -20,25 +20,20 @@ describe '#call' do context 'when Crm raise an error' do let(:endpoint) { 'inquiries/1/replies' } - let(:response) do - { Data: [], - Message: 'Data Validation: No Inquiry Found', - ExceptionOccurred: true, - ExceptionMessage: 'Data Validation: No Inquiry Found', - MessageId: '2d746074-9e5c-4987-a894-e3f834b156b5' } + let(:body) do + '{"Data":[],"Message":"Data Validation: No Inquiry Found",' \ + '"ExceptionOccurred":true,"ExceptionMessage":"Data Validation:' \ + ' No Inquiry Found","MessageId":"95f9d1e7-d532-41d7-b43f-78ae9a3e778d"}' end + let(:failure) { Faraday::Response.new(response_body: body, status: 400) } before do allow_any_instance_of(Crm::CrmToken).to receive(:call).and_return('Token') - allow(service).to receive(:call).and_return(response) + allow(service).to receive(:call).and_return(failure) end it 'returns the error' do - expect(retriever.call).to eq({ Data: [], - Message: 'Data Validation: No Inquiry Found', - ExceptionOccurred: true, - ExceptionMessage: 'Data Validation: No Inquiry Found', - MessageId: '2d746074-9e5c-4987-a894-e3f834b156b5' }) + expect(retriever.call).to eq('Data Validation: No Inquiry Found') end end diff --git a/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/retriever_spec.rb b/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/retriever_spec.rb index 910f5232db0..3f48ccb07a3 100644 --- a/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/retriever_spec.rb +++ b/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/retriever_spec.rb @@ -7,6 +7,10 @@ described_class.new(user_mock_data:, entity_class: AskVAApi::Inquiries::Entity, icn:) end + def mock_response(status:, body:) + instance_double(Faraday::Response, status:, body: body.to_json) + end + let(:service) { instance_double(Crm::Service) } let(:icn) { nil } let(:error_message) { 'Some error occurred' } @@ -25,21 +29,14 @@ ',"ExceptionOccurred":true,"ExceptionMessage":"Data Validation: No Inquiries found by ' \ 'ID A-20240423-30709","MessageId":"ca5b990a-63fe-407d-a364-46caffce12c1"}' end - let(:failure) do - { - status: 400, - body:, - response_headers: nil, - url: nil - } - end + let(:failure) { Faraday::Response.new(response_body: body, status: 400) } before do allow_any_instance_of(Crm::CrmToken).to receive(:call).and_return('Token') allow(service).to receive(:call).and_return(failure) end - it 'raise CorrespondenceRetrieverrError' do + it 'raise InquiriesRetrieverrError' do expect { retriever.call }.to raise_error(ErrorHandler::ServiceError) end end @@ -188,11 +185,7 @@ allow_any_instance_of(Crm::CrmToken).to receive(:call).and_return('Token') allow(service).to receive(:call).and_return(response) allow_any_instance_of(AskVAApi::Correspondences::Retriever).to receive(:call) - .and_return({ Data: [], - Message: 'Data Validation: No Inquiry Found', - ExceptionOccurred: true, - ExceptionMessage: 'Data Validation: No Inquiry Found', - MessageId: '2d746074-9e5c-4987-a894-e3f834b156b5' }) + .and_return('Data Validation: No Inquiry Found') end it 'returns correspondences as an empty array' do diff --git a/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb b/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb index 1cf3c468603..b9acb4575f8 100644 --- a/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb +++ b/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb @@ -12,7 +12,7 @@ JSON.parse(File.read('modules/ask_va_api/config/locales/get_inquiries_mock_data.json'))['Data'] end let(:valid_id) { mock_inquiries.first['InquiryNumber'] } - let(:invalid_id) { 'invalid-id' } + let(:invalid_id) { 'A-20240423-30709' } before do allow(LogService).to receive(:new).and_return(logger) @@ -212,14 +212,7 @@ ',"ExceptionOccurred":true,"ExceptionMessage":"Data Validation: No Inquiries found by ' \ 'ID A-20240423-30709","MessageId":"ca5b990a-63fe-407d-a364-46caffce12c1"}' end - let(:failure) do - { - status: 400, - body:, - response_headers: nil, - url: nil - } - end + let(:failure) { Faraday::Response.new(response_body: body, status: 400) } let(:service) { instance_double(Crm::Service) } before do @@ -234,11 +227,7 @@ it_behaves_like 'common error handling', :unprocessable_entity, 'service_error', 'AskVAApi::Inquiries::InquiriesRetrieverError: ' \ - '{:status=>400, :body=>"{\"Data\":null,\"Message\":\"Data Validation: ' \ - 'No Inquiries found by ID A-20240423-30709\",\"ExceptionOccurred\":' \ - 'true,\"ExceptionMessage\":\"Data Validation: No Inquiries found by ID ' \ - 'A-20240423-30709\",\"MessageId\":\"ca5b990a-63fe-407d-a364-46caffce12c1\"}",' \ - ' :response_headers=>nil, :url=>nil}' + 'Data Validation: No Inquiries found by ID A-20240423-30709' end end end