Basic tests for the trace jobs
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 23 Jan 2019 13:47:49 +0000 (14:47 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 23 Jan 2019 13:47:49 +0000 (14:47 +0100)
test/jobs/trace_destroyer_job_test.rb
test/jobs/trace_importer_job_test.rb

index 0c62716..ed86a16 100644 (file)
@@ -1,7 +1,18 @@
-require 'test_helper'
+require "test_helper"
+require "minitest/mock"
 
 class TraceDestroyerJobTest < ActiveJob::TestCase
-  # test "the truth" do
-  #   assert true
-  # end
+  def test_destroy_called
+    trace = Minitest::Mock.new
+
+    # Tiny little bit of mocking to make activejob happy
+    trace.expect :is_a?, false, [TraceDestroyerJob]
+
+    # Check that trace.destroy is called
+    trace.expect :destroy, true
+
+    TraceDestroyerJob.perform_now(trace)
+
+    assert_mock trace
+  end
 end
index 9de0f64..73c8ceb 100644 (file)
@@ -1,7 +1,64 @@
-require 'test_helper'
+require "test_helper"
+require "minitest/mock"
 
 class TraceImporterJobTest < ActiveJob::TestCase
-  # test "the truth" do
-  #   assert true
-  # end
+  def test_success_notification
+    # Check that the user gets a success notification when the trace has valid points
+    trace = create(:trace)
+
+    gpx = Minitest::Mock.new
+    def gpx.actual_points
+      5
+    end
+
+    trace.stub(:import, gpx) do
+      perform_enqueued_jobs do
+        TraceImporterJob.perform_now(trace)
+      end
+    end
+
+    assert_performed_jobs 1
+
+    email = ActionMailer::Base.deliveries.last
+    assert_equal trace.user.email, email.to[0]
+    assert_match(/success/, email.subject)
+  end
+
+  def test_failure_notification
+    # Check that the user gets a failure notification when the trace has no valid points
+    trace = create(:trace)
+
+    gpx = Minitest::Mock.new
+    def gpx.actual_points
+      0
+    end
+
+    trace.stub(:import, gpx) do
+      perform_enqueued_jobs do
+        TraceImporterJob.perform_now(trace)
+      end
+    end
+
+    assert_performed_jobs 1
+
+    email = ActionMailer::Base.deliveries.last
+    assert_equal trace.user.email, email.to[0]
+    assert_match(/failure/, email.subject)
+  end
+
+  def test_error_notification
+    # 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
+    end
+
+    assert_performed_jobs 1
+
+    email = ActionMailer::Base.deliveries.last
+    assert_equal trace.user.email, email.to[0]
+    assert_match(/failure/, email.subject)
+  end
 end