Skip to content

Commit

Permalink
[DBX-94173] post staging test tweaks for 526 failure email (#19066)
Browse files Browse the repository at this point in the history
  • Loading branch information
SamStuckey authored Oct 25, 2024
1 parent 37b4695 commit e55aceb
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 49 deletions.
50 changes: 28 additions & 22 deletions app/sidekiq/form526_submission_failure_email_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
class Form526SubmissionFailureEmailJob
include Sidekiq::Job

attr_reader :submission_id
attr_accessor :submission

STATSD_PREFIX = 'api.form_526.veteran_notifications.form526_submission_failure_email'
# https://github.com/department-of-veterans-affairs/va.gov-team-sensitive/blob/274bea7fb835e51626259ac16b32c33ab0b2088a/platform/practices/zero-silent-failures/logging-silent-failures.md#capture-silent-failures-state
Expand Down Expand Up @@ -59,37 +59,30 @@ class Form526SubmissionFailureEmailJob
end

def perform(submission_id)
submission = Form526Submission.find(submission_id)
send_email(submission)
track_remedial_action(submission)
log_success(submission)
@submission = Form526Submission.find(submission_id)
send_email
track_remedial_action
log_success
rescue => e
log_failure(e, submission)
log_failure(e)
raise
end

private

def send_email(submission)
def send_email
email_client = VaNotify::Service.new(Settings.vanotify.services.benefits_disability.api_key)
template_id = Settings.vanotify.services.benefits_disability.template_id
.form526_submission_failure_notification_template_id

personalisation = {
first_name: submission.get_first_name,
date_submitted: submission.format_creation_time_for_mailers,
forms_submitted: forms_submitted(submission.form),
files_submitted: files_submitted(submission.form['form526_uploads'])
}

email_client.send_email(
email_address: submission.veteran_email_address,
template_id:,
personalisation:
)
end

def forms_submitted(form)
def list_forms_submitted
[].tap do |forms|
forms << FORM_DESCRIPTIONS['form4142'] if form['form4142'].present?
forms << FORM_DESCRIPTIONS['form0781'] if form['form0781'].present?
Expand All @@ -98,23 +91,32 @@ def forms_submitted(form)
end
end

def files_submitted(uploads)
return [] if uploads.nil?
def list_files_submitted
return [] if form['form526_uploads'].blank?

guids = uploads.map { |data| data&.dig('confirmationCode') }.compact
guids = form['form526_uploads'].map { |data| data&.dig('confirmationCode') }.compact
files = SupportingEvidenceAttachment.where(guid: guids)
files.map(&:obscured_filename)
end

def track_remedial_action(submission)
def personalisation
{
first_name: submission.get_first_name,
date_submitted: submission.format_creation_time_for_mailers,
forms_submitted: list_forms_submitted.presence || 'None',
files_submitted: list_files_submitted.presence || 'None'
}
end

def track_remedial_action
Form526SubmissionRemediation.create!(
form526_submission: submission,
remediation_type: Form526SubmissionRemediation.remediation_types['email_notified'],
lifecycle: ['Email failure notification sent']
)
end

def log_success(submission)
def log_success
Rails.logger.info(
'Form526SubmissionFailureEmail notification dispatched',
{
Expand All @@ -127,16 +129,20 @@ def log_success(submission)
StatsD.increment('silent_failure_avoided_no_confirmation', tags: DD_ZSF_TAGS)
end

def log_failure(error, submission)
def log_failure(error)
Rails.logger.error(
'Form526SubmissionFailureEmail notification failed',
{
form526_submission_id: submission.id,
form526_submission_id: submission&.id,
error_message: error.try(:message),
timestamp: Time.now.utc
}
)

StatsD.increment("#{STATSD_PREFIX}.error")
end

def form
@form ||= submission.form
end
end
1 change: 0 additions & 1 deletion spec/factories/form526_submissions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,6 @@
end

with_ancillary['form526_uploads'] = with_uploads
with_ancillary['form526']['form526']['veteran']['emailAddress'] = 'test@example.com'
with_ancillary.to_json
end
end
Expand Down
113 changes: 88 additions & 25 deletions spec/sidekiq/form526_submission_failure_email_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
RSpec.describe Form526SubmissionFailureEmailJob, type: :job do
subject { described_class }

let!(:form526_submission) { create(:form526_submission, :with_uploads_and_ancillary_forms) }
let(:email_service) { double('VaNotify::Service') }

before do
Expand All @@ -17,40 +16,104 @@
end

describe '#perform' do
let(:expected_params) do
{
email_address: 'test@example.com',
template_id: 'form526_submission_failure_notification_template_id',
personalisation: {
first_name: form526_submission.get_first_name,
date_submitted: form526_submission.format_creation_time_for_mailers,
files_submitted: ['extXas.pdf', 'extXas.pdf', 'extXas.pdf'],
forms_submitted: [
'VA Form 21-4142',
'VA Form 21-0781',
'VA Form 21-0781a',
'VA Form 21-8940'
]
context 'when a user has additional form and files with their submission' do
let!(:form526_submission) { create(:form526_submission, :with_uploads_and_ancillary_forms) }

let(:expected_params) do
{
email_address: 'test@email.com',
template_id: 'form526_submission_failure_notification_template_id',
personalisation: {
first_name: form526_submission.get_first_name,
date_submitted: form526_submission.format_creation_time_for_mailers,
files_submitted: ['extXas.pdf', 'extXas.pdf', 'extXas.pdf'],
forms_submitted: [
'VA Form 21-4142',
'VA Form 21-0781',
'VA Form 21-0781a',
'VA Form 21-8940'
]
}
}
}
end

it 'dispatches a failure notification email with the expected params' do
expect(email_service).to receive(:send_email).with(expected_params)

subject.perform_async(form526_submission.id)
subject.drain
end

it 'creates a remediation record for the submission' do
allow(email_service).to receive(:send_email)
expect { subject.new.perform(form526_submission.id) }.to change(Form526SubmissionRemediation, :count)
remediation = Form526SubmissionRemediation.where(form526_submission_id: form526_submission.id)
expect(remediation.present?).to be true
end
end

it 'dispatches a failure notification email with the expected params' do
expect(email_service).to receive(:send_email).with(expected_params)
context 'when a user has no additional additional forms their submission' do
let!(:form526_submission) { create(:form526_submission, :with_uploads) }
let(:expected_params) do
{
email_address: 'test@email.com',
template_id: 'form526_submission_failure_notification_template_id',
personalisation: {
first_name: form526_submission.get_first_name,
date_submitted: form526_submission.format_creation_time_for_mailers,
files_submitted: ['extXas.pdf', 'extXas.pdf', 'extXas.pdf'],
forms_submitted: 'None'
}
}
end

before do
form526_submission.form['form526_uploads'].each do |upload|
create(:supporting_evidence_attachment, :with_file_data, guid: upload['confirmationCode'])
end
end

it 'replaces the forms list variable with a placeholder' do
expect(email_service).to receive(:send_email).with(expected_params)

subject.perform_async(form526_submission.id)
subject.drain
subject.perform_async(form526_submission.id)
subject.drain
end
end

it 'creates a remediation record for the submission' do
allow(email_service).to receive(:send_email)
expect { subject.new.perform(form526_submission.id) }.to change(Form526SubmissionRemediation, :count)
remediation = Form526SubmissionRemediation.where(form526_submission_id: form526_submission.id)
expect(remediation.present?).to be true
context 'when a user has no additional additional user-uploaded files their submission' do
let(:expected_params) do
{
email_address: 'test@email.com',
template_id: 'form526_submission_failure_notification_template_id',
personalisation: {
first_name: form526_submission.get_first_name,
date_submitted: form526_submission.format_creation_time_for_mailers,
files_submitted: 'None',
forms_submitted: [
'VA Form 21-4142',
'VA Form 21-0781',
'VA Form 21-0781a',
'VA Form 21-8940'
]
}
}
end

let!(:form526_submission) { create(:form526_submission, :with_everything) }

it 'replaces the files list variable with a placeholder' do
expect(email_service).to receive(:send_email).with(expected_params)

subject.perform_async(form526_submission.id)
subject.drain
end
end
end

describe 'logging' do
let!(:form526_submission) { create(:form526_submission, :with_uploads_and_ancillary_forms) }

let(:timestamp) { Time.now.utc }
let(:tags) { described_class::DD_ZSF_TAGS }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"form526": {
"form526": {
"veteran": {
"emailAddress": "test@email.com",
"currentMailingAddress": {
"country": "USA",
"addressLine1": "1234 Couch Street",
Expand Down Expand Up @@ -699,4 +700,4 @@
"remarks": "Lorem ipsum dolor sit amet"
}
}
}
}

0 comments on commit e55aceb

Please sign in to comment.