Send trace import result notification immediately

If we delay sending failure notifications then they will fail
because the trace will no longer exist.

As trace imports are running in the background anyway there
doesn't seem to be any good reason to defer the emails.

Fixes #2312
This commit is contained in:
Tom Hughes 2019-07-15 21:45:07 +01:00
parent d2d3f2c9fd
commit 5cb96cd1a2
2 changed files with 6 additions and 18 deletions

View file

@ -5,15 +5,15 @@ class TraceImporterJob < ApplicationJob
gpx = trace.import
if gpx.actual_points.positive?
Notifier.gpx_success(trace, gpx.actual_points).deliver_later
Notifier.gpx_success(trace, gpx.actual_points).deliver
else
Notifier.gpx_failure(trace, "0 points parsed ok. Do they all have lat,lng,alt,timestamp?").deliver_later
Notifier.gpx_failure(trace, "0 points parsed ok. Do they all have lat,lng,alt,timestamp?").deliver
trace.destroy
end
rescue StandardError => e
logger.info e.to_s
e.backtrace.each { |l| logger.info l }
Notifier.gpx_failure(trace, e.to_s + "\n" + e.backtrace.join("\n")).deliver_later
Notifier.gpx_failure(trace, e.to_s + "\n" + e.backtrace.join("\n")).deliver
trace.destroy
end
end

View file

@ -12,13 +12,9 @@ class TraceImporterJobTest < ActiveJob::TestCase
end
trace.stub(:import, gpx) do
perform_enqueued_jobs do
TraceImporterJob.perform_now(trace)
end
TraceImporterJob.perform_now(trace)
end
assert_performed_jobs 1
email = ActionMailer::Base.deliveries.last
assert_equal trace.user.email, email.to[0]
assert_match(/success/, email.subject)
@ -36,13 +32,9 @@ class TraceImporterJobTest < ActiveJob::TestCase
end
trace.stub(:import, gpx) do
perform_enqueued_jobs do
TraceImporterJob.perform_now(trace)
end
TraceImporterJob.perform_now(trace)
end
assert_performed_jobs 1
email = ActionMailer::Base.deliveries.last
assert_equal trace.user.email, email.to[0]
assert_match(/failure/, email.subject)
@ -54,13 +46,9 @@ class TraceImporterJobTest < ActiveJob::TestCase
# Check that the user gets a failure notification when something goes badly wrong
trace = create(:trace)
trace.stub(:import, -> { raise }) do
perform_enqueued_jobs do
TraceImporterJob.perform_now(trace)
end
TraceImporterJob.perform_now(trace)
end
assert_performed_jobs 1
email = ActionMailer::Base.deliveries.last
assert_equal trace.user.email, email.to[0]
assert_match(/failure/, email.subject)