Copy trace fixture files, rather than symlinking
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 18 Mar 2020 14:35:55 +0000 (15:35 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 18 Mar 2020 14:35:55 +0000 (15:35 +0100)
Since we are using tmpdirs in order to enable parallel testing, we
can go the full hog and drop the fakefs too and just copy all the
files directly into the tmpdir. If a test makes changes (e.g.
changing the icon file during an import) the copy in the tmpdir is
thrown away at the end of the test anyway.

Gemfile
Gemfile.lock
test/controllers/api/traces_controller_test.rb
test/controllers/traces_controller_test.rb
test/factories/traces.rb
test/models/trace_test.rb

diff --git a/Gemfile b/Gemfile
index 9a3fb1f6b03d3e82b49f74f5cace9443fb335e8e..95144d438f1957f8a1f6f60d039b2ec6a90e4d1f 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -138,7 +138,6 @@ end
 
 # Gems needed for running tests
 group :test do
-  gem "fakefs", :require => "fakefs/safe"
   gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
   gem "rails-controller-testing"
   gem "rubocop"
index f4403e7a14b83a60621a53c0e67d31bb860dafde..95fdf3569521b7e89bc81930dd2c222a2cddf15e 100644 (file)
@@ -206,7 +206,6 @@ GEM
     factory_bot_rails (5.1.1)
       factory_bot (~> 5.1.0)
       railties (>= 4.2.0)
-    fakefs (1.0.0)
     faraday (1.0.0)
       multipart-post (>= 1.2, < 3)
     ffi (1.12.2)
@@ -496,7 +495,6 @@ DEPENDENCIES
   dynamic_form
   erb_lint
   factory_bot_rails
-  fakefs
   faraday
   ffi-libarchive
   gd2-ffij (>= 0.4.0)
index be5cb16cf27c34c0cbf3eac0ed5722bf99e9724b..88c6fa90f82dbff3f885feaea1d73a32c7189792 100644 (file)
@@ -1,5 +1,4 @@
 require "test_helper"
-require "minitest/mock"
 
 module Api
   class TracesControllerTest < ActionController::TestCase
index 0f9a9c1dba14123eb57c88ad6292e885e7df0154..72a3759390850b0fdb743d133feda1a96e43ed5f 100644 (file)
@@ -1,5 +1,4 @@
 require "test_helper"
-require "minitest/mock"
 
 class TracesControllerTest < ActionController::TestCase
   # Use temporary directories with unique names for each test
index 458faca83e4390ceb5e54f958c0cf0c6b6701602..961d52988fc0595c841e9464e9f4028b23447ef6 100644 (file)
@@ -19,12 +19,12 @@ FactoryBot.define do
 
     after(:create) do |trace, evaluator|
       if evaluator.fixture
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"),
-                     File.join(Settings.gpx_trace_dir, "#{trace.id}.gpx"))
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
-                     File.join(Settings.gpx_image_dir, "#{trace.id}.gif"))
-        File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
-                     File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"),
+                       File.join(Settings.gpx_trace_dir, "#{trace.id}.gpx"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
+                       File.join(Settings.gpx_image_dir, "#{trace.id}.gif"))
+        FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
+                       File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif"))
       end
     end
   end
index b610a338a5db764b5cd523bc3ad70b709c7a5c2d..2955be3ad67768103b26f3446b5cd63734a3c03c 100644 (file)
@@ -1,6 +1,5 @@
 require "test_helper"
 require "gpx"
-require "minitest/mock"
 
 class TraceTest < ActiveSupport::TestCase
   # Use temporary directories with unique names for each test
@@ -189,166 +188,116 @@ class TraceTest < ActiveSupport::TestCase
     trace.destroy
   end
 
-  # When testing the trace.import method, care needs to be taken regarding the icon
-  # fixture files, since the fixtures could be overwritten by newly generated files.
-  # We use FakeFS to temporarily protect the real fixture files from being overwritten.
-
   def test_import_removes_previous_tracepoints
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      # Tracepoints don't have a primary key, so we use a specific latitude to
-      # check for successful deletion
-      create(:tracepoint, :latitude => 54321, :trace => trace)
-      assert_equal 1, Tracepoint.where(:latitude => 54321).count
+    trace = create(:trace, :fixture => "a")
+    # Tracepoints don't have a primary key, so we use a specific latitude to
+    # check for successful deletion
+    create(:tracepoint, :latitude => 54321, :trace => trace)
+    assert_equal 1, Tracepoint.where(:latitude => 54321).count
 
-      trace.import
+    trace.import
 
-      assert_equal 0, Tracepoint.where(:latitude => 54321).count
-    end
+    assert_equal 0, Tracepoint.where(:latitude => 54321).count
   end
 
   def test_import_creates_tracepoints
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count
+    trace = create(:trace, :fixture => "a")
+    assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count
 
-      trace.import
+    trace.import
 
-      trace.reload
-      assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
+    trace.reload
+    assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
 
-      # Check that the tile has been set prior to the bulk import
-      # i.e. that the callbacks have been run correctly
-      assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile
-    end
+    # Check that the tile has been set prior to the bulk import
+    # i.e. that the callbacks have been run correctly
+    assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile
   end
 
   def test_import_creates_icon
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
-      FileUtils.rm(icon_path)
-      assert_equal false, File.exist?(icon_path)
+    trace = create(:trace, :fixture => "a")
+    icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
+    FileUtils.rm(icon_path)
+    assert_equal false, File.exist?(icon_path)
 
-      trace.import
+    trace.import
 
-      assert_equal true, File.exist?(icon_path)
-    end
+    assert_equal true, File.exist?(icon_path)
   end
 
   def test_import_creates_large_picture
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
-      large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
-      FileUtils.rm(large_picture_path)
-      assert_equal false, File.exist?(large_picture_path)
+    trace = create(:trace, :fixture => "a")
+    large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
+    FileUtils.rm(large_picture_path)
+    assert_equal false, File.exist?(large_picture_path)
 
-      trace.import
+    trace.import
 
-      assert_equal true, File.exist?(large_picture_path)
-    end
+    assert_equal true, File.exist?(large_picture_path)
   end
 
   def test_import_handles_bz2
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "c")
+    trace = create(:trace, :fixture => "c")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_plain
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "a")
+    trace = create(:trace, :fixture => "a")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_plain_with_bom
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace = create(:trace, :fixture => "b")
+    trace = create(:trace, :fixture => "b")
 
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_gz
     trace = create(:trace, :fixture => "d")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 1, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 1, trace.size
   end
 
   def test_import_handles_zip
     trace = create(:trace, :fixture => "f")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar
     trace = create(:trace, :fixture => "g")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar_gz
     trace = create(:trace, :fixture => "h")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   def test_import_handles_tar_bz2
     trace = create(:trace, :fixture => "i")
 
-    FakeFS do
-      FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
-      trace.import
+    trace.import
 
-      assert_equal 2, trace.size
-    ensure
-      trace.destroy
-    end
+    assert_equal 2, trace.size
   end
 
   private