Skip to content

Commit

Permalink
35935 - Add Sentry logging for down VBMS (#9167)
Browse files Browse the repository at this point in the history
* Add sentry logging for VBMS error

* Add tests for sentry logging and refactor VCR cassettes
  • Loading branch information
Scott James authored Feb 21, 2022
1 parent 7077e84 commit 94de79f
Show file tree
Hide file tree
Showing 3 changed files with 867 additions and 50 deletions.
12 changes: 9 additions & 3 deletions lib/debt_management_center/debt_letter_downloader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

module DebtManagementCenter
class DebtLetterDownloader
include SentryLogging

DEBTS_DOCUMENT_TYPES = %w[
193
194
Expand All @@ -20,6 +22,7 @@ def initialize(user)
@user = user
@client = VBMS::Client.from_env_vars(env_name: Settings.vbms.env)
@service = debts_service
@vbms_documents = get_vbms_documents
verify_no_dependent_debts
end

Expand All @@ -34,12 +37,12 @@ def get_letter(document_id)
def file_name(document_id)
verify_letter_in_folder(document_id)

document = vbms_documents.detect { |doc| doc.document_id == document_id }
document = @vbms_documents.detect { |doc| doc.document_id == document_id }
"#{document.type_description} #{document.upload_date.to_formatted_s(:long)}"
end

def list_letters
debts_records = vbms_documents.find_all do |record|
debts_records = @vbms_documents.find_all do |record|
DEBTS_DOCUMENT_TYPES.include?(record.doc_type)
end

Expand All @@ -52,10 +55,13 @@ def list_letters

private

def vbms_documents
def get_vbms_documents
@client.send_request(
VBMS::Requests::FindDocumentVersionReference.new(@service.file_number)
)
rescue => e
log_exception_to_sentry(e)
[]
end

def debts_service
Expand Down
99 changes: 52 additions & 47 deletions spec/lib/debt_management_center/debt_letter_downloader_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@
require 'debt_management_center/debt_letter_downloader'
require Rails.root.join('modules', 'claims_api', 'spec', 'support', 'fake_vbms.rb')

RSpec.describe DebtManagementCenter::DebtLetterDownloader do
vcr_options = {
cassette_name: 'debts/person_data_and_letters',
match_requests_on: %i[path query]
}

RSpec.describe DebtManagementCenter::DebtLetterDownloader, vcr: vcr_options do
subject { described_class.new(user) }

let(:file_number) { '796043735' }
Expand All @@ -31,80 +36,80 @@ def get_vbms_fixture(path)
get_fixture("vbms/#{path}").map { |r| OpenStruct.new(r) }
end

def use_person_and_letter_cassettes(&block)
VCR.use_cassette('bgs/people_service/person_data') do
VCR.use_cassette('debts/get_letters', &block)
end
end
context 'VBMS is available' do
before do
allow(VBMS::Client).to receive(:from_env_vars).and_return(vbms_client)

before do
allow(VBMS::Client).to receive(:from_env_vars).and_return(vbms_client)

stub_vbms_client_request(
'FindDocumentVersionReference',
file_number,
get_vbms_fixture('find_document_version_reference')
)
end
stub_vbms_client_request(
'FindDocumentVersionReference',
file_number,
get_vbms_fixture('find_document_version_reference')
)
end

describe '#get_letter' do
context 'with a document in the users folder' do
let(:content) { File.read('spec/fixtures/pdf_fill/extras.pdf') }

before do
stub_vbms_client_request(
'GetDocumentContent',
good_document_id,
OpenStruct.new(
document_id: good_document_id,
content: content
describe '#get_letter' do
context 'with a document in the users folder' do
let(:content) { File.read('spec/fixtures/pdf_fill/extras.pdf') }

before do
stub_vbms_client_request(
'GetDocumentContent',
good_document_id,
OpenStruct.new(
document_id: good_document_id,
content: content
)
)
)
end
end

it 'downloads a debt letter' do
use_person_and_letter_cassettes do
it 'downloads a debt letter' do
expect(subject.get_letter(good_document_id)).to eq(content)
end
end
end

context 'with a document not in the users folder' do
it 'raises an unauthorized error' do
use_person_and_letter_cassettes do
context 'with a document not in the users folder' do
it 'raises an unauthorized error' do
expect { subject.get_letter(bad_document_id) }.to raise_error(Common::Exceptions::Unauthorized)
end
end
end
end

describe '#list_letters' do
it 'gets letter ids and descriptions' do
use_person_and_letter_cassettes do
describe '#list_letters' do
it 'gets letter ids and descriptions' do
expect(subject.list_letters.to_json).to eq(
get_fixture('vbms/list_letters').to_json
)
end
end
end

describe '#file_name' do
context 'with a proper document id' do
it 'returns a filename' do
use_person_and_letter_cassettes do
describe '#file_name' do
context 'with a proper document id' do
it 'returns a filename' do
expect(subject.file_name(good_document_id)).to eq(
'DMC - Debt Increase Letter June 03, 2020'
)
end
end
end

context 'without a proper document id' do
it 'raises an unauthorized error' do
use_person_and_letter_cassettes do
context 'without a proper document id' do
it 'raises an unauthorized error' do
expect { subject.file_name(bad_document_id) }.to raise_error(Common::Exceptions::Unauthorized)
end
end
end
end

context 'VBMS is down' do
before do
allow(VBMS::Client).to receive(:from_env_vars).and_return(vbms_client)
allow(vbms_client).to receive(:send_request).and_raise(Common::Client::Errors::ClientError)
end

describe '#list_letters' do
it 'notifies Sentry upon downstream service error', :skip_before do
expect_any_instance_of(SentryLogging).to receive(:log_exception_to_sentry)
expect(subject.list_letters.to_json).to eq('[]')
end
end
end
end
Loading

0 comments on commit 94de79f

Please sign in to comment.