Copy trace fixture files, rather than symlinking

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.
This commit is contained in:
Andy Allan 2020-03-18 15:35:55 +01:00
parent 0e612ea99a
commit 1cb0767e3d
6 changed files with 52 additions and 108 deletions

View file

@ -138,7 +138,6 @@ end
# Gems needed for running tests # Gems needed for running tests
group :test do group :test do
gem "fakefs", :require => "fakefs/safe"
gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20] gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
gem "rails-controller-testing" gem "rails-controller-testing"
gem "rubocop" gem "rubocop"

View file

@ -206,7 +206,6 @@ GEM
factory_bot_rails (5.1.1) factory_bot_rails (5.1.1)
factory_bot (~> 5.1.0) factory_bot (~> 5.1.0)
railties (>= 4.2.0) railties (>= 4.2.0)
fakefs (1.0.0)
faraday (1.0.0) faraday (1.0.0)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
ffi (1.12.2) ffi (1.12.2)
@ -496,7 +495,6 @@ DEPENDENCIES
dynamic_form dynamic_form
erb_lint erb_lint
factory_bot_rails factory_bot_rails
fakefs
faraday faraday
ffi-libarchive ffi-libarchive
gd2-ffij (>= 0.4.0) gd2-ffij (>= 0.4.0)

View file

@ -1,5 +1,4 @@
require "test_helper" require "test_helper"
require "minitest/mock"
module Api module Api
class TracesControllerTest < ActionController::TestCase class TracesControllerTest < ActionController::TestCase

View file

@ -1,5 +1,4 @@
require "test_helper" require "test_helper"
require "minitest/mock"
class TracesControllerTest < ActionController::TestCase class TracesControllerTest < ActionController::TestCase
# Use temporary directories with unique names for each test # Use temporary directories with unique names for each test

View file

@ -19,11 +19,11 @@ FactoryBot.define do
after(:create) do |trace, evaluator| after(:create) do |trace, evaluator|
if evaluator.fixture if evaluator.fixture
File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"), FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gpx"),
File.join(Settings.gpx_trace_dir, "#{trace.id}.gpx")) File.join(Settings.gpx_trace_dir, "#{trace.id}.gpx"))
File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"), FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
File.join(Settings.gpx_image_dir, "#{trace.id}.gif")) File.join(Settings.gpx_image_dir, "#{trace.id}.gif"))
File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"), FileUtils.copy(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")) File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif"))
end end
end end

View file

@ -1,6 +1,5 @@
require "test_helper" require "test_helper"
require "gpx" require "gpx"
require "minitest/mock"
class TraceTest < ActiveSupport::TestCase class TraceTest < ActiveSupport::TestCase
# Use temporary directories with unique names for each test # Use temporary directories with unique names for each test
@ -189,13 +188,7 @@ class TraceTest < ActiveSupport::TestCase
trace.destroy trace.destroy
end 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 def test_import_removes_previous_tracepoints
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace = create(:trace, :fixture => "a") trace = create(:trace, :fixture => "a")
# Tracepoints don't have a primary key, so we use a specific latitude to # Tracepoints don't have a primary key, so we use a specific latitude to
# check for successful deletion # check for successful deletion
@ -206,11 +199,8 @@ class TraceTest < ActiveSupport::TestCase
assert_equal 0, Tracepoint.where(:latitude => 54321).count assert_equal 0, Tracepoint.where(:latitude => 54321).count
end end
end
def test_import_creates_tracepoints def test_import_creates_tracepoints
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace = create(:trace, :fixture => "a") trace = create(:trace, :fixture => "a")
assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count
@ -223,11 +213,8 @@ class TraceTest < ActiveSupport::TestCase
# i.e. that the callbacks have been run correctly # i.e. that the callbacks have been run correctly
assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile assert_equal 3221331576, Tracepoint.where(:gpx_id => trace.id).first.tile
end end
end
def test_import_creates_icon def test_import_creates_icon
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace = create(:trace, :fixture => "a") trace = create(:trace, :fixture => "a")
icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif") icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
FileUtils.rm(icon_path) FileUtils.rm(icon_path)
@ -237,11 +224,8 @@ class TraceTest < ActiveSupport::TestCase
assert_equal true, File.exist?(icon_path) assert_equal true, File.exist?(icon_path)
end end
end
def test_import_creates_large_picture def test_import_creates_large_picture
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace = create(:trace, :fixture => "a") trace = create(:trace, :fixture => "a")
large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif") large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
FileUtils.rm(large_picture_path) FileUtils.rm(large_picture_path)
@ -251,104 +235,69 @@ class TraceTest < ActiveSupport::TestCase
assert_equal true, File.exist?(large_picture_path) assert_equal true, File.exist?(large_picture_path)
end end
end
def test_import_handles_bz2 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 assert_equal 1, trace.size
end end
end
def test_import_handles_plain 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 assert_equal 1, trace.size
end end
end
def test_import_handles_plain_with_bom 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 assert_equal 1, trace.size
end end
end
def test_import_handles_gz def test_import_handles_gz
trace = create(:trace, :fixture => "d") trace = create(:trace, :fixture => "d")
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace.import trace.import
assert_equal 1, trace.size assert_equal 1, trace.size
ensure
trace.destroy
end
end end
def test_import_handles_zip def test_import_handles_zip
trace = create(:trace, :fixture => "f") trace = create(:trace, :fixture => "f")
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace.import trace.import
assert_equal 2, trace.size assert_equal 2, trace.size
ensure
trace.destroy
end
end end
def test_import_handles_tar def test_import_handles_tar
trace = create(:trace, :fixture => "g") trace = create(:trace, :fixture => "g")
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace.import trace.import
assert_equal 2, trace.size assert_equal 2, trace.size
ensure
trace.destroy
end
end end
def test_import_handles_tar_gz def test_import_handles_tar_gz
trace = create(:trace, :fixture => "h") trace = create(:trace, :fixture => "h")
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace.import trace.import
assert_equal 2, trace.size assert_equal 2, trace.size
ensure
trace.destroy
end
end end
def test_import_handles_tar_bz2 def test_import_handles_tar_bz2
trace = create(:trace, :fixture => "i") trace = create(:trace, :fixture => "i")
FakeFS do
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
trace.import trace.import
assert_equal 2, trace.size assert_equal 2, trace.size
ensure
trace.destroy
end
end end
private private