Send trace import result notification immediately
authorTom Hughes <tom@compton.nu>
Mon, 15 Jul 2019 20:45:07 +0000 (21:45 +0100)
committerTom Hughes <tom@compton.nu>
Mon, 15 Jul 2019 20:45:07 +0000 (21:45 +0100)
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

app/jobs/trace_importer_job.rb
test/jobs/trace_importer_job_test.rb

index e4395bf..2a9a867 100644 (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
index bf30e69..e1ddcc9 100644 (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)