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
group :test do
gem "fakefs", :require => "fakefs/safe"
gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
gem "rails-controller-testing"
gem "rubocop"

View 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)

View file

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

View file

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

View 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

View 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