Merge remote-tracking branch 'upstream/pull/2448'

This commit is contained in:
Tom Hughes 2020-03-18 14:58:06 +00:00
commit eec9e29c96
9 changed files with 94 additions and 114 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,11 +1,21 @@
require "test_helper"
require "minitest/mock"
module Api
class TracesControllerTest < ActionController::TestCase
# Use temporary directories with unique names for each test
# This allows the tests to be run in parallel.
def setup
@gpx_trace_dir_orig = Settings.gpx_trace_dir
@gpx_image_dir_orig = Settings.gpx_image_dir
Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
end
def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
FileUtils.remove_dir(Settings.gpx_trace_dir)
FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end
##

View file

@ -1,10 +1,20 @@
require "test_helper"
require "minitest/mock"
class TracesControllerTest < ActionController::TestCase
# Use temporary directories with unique names for each test
# This allows the tests to be run in parallel.
def setup
@gpx_trace_dir_orig = Settings.gpx_trace_dir
@gpx_image_dir_orig = Settings.gpx_image_dir
Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
end
def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
FileUtils.remove_dir(Settings.gpx_trace_dir)
FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end
##

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"),
Rails.root.join("test", "gpx", "traces", "#{trace.id}.gpx"))
File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}.gif"),
Rails.root.join("test", "gpx", "images", "#{trace.id}.gif"))
File.symlink(Rails.root.join("test", "gpx", "fixtures", "#{evaluator.fixture}_icon.gif"),
Rails.root.join("test", "gpx", "images", "#{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,11 +1,21 @@
require "test_helper"
require "gpx"
require "minitest/mock"
class TraceTest < ActiveSupport::TestCase
# Use temporary directories with unique names for each test
# This allows the tests to be run in parallel.
def setup
@gpx_trace_dir_orig = Settings.gpx_trace_dir
@gpx_image_dir_orig = Settings.gpx_image_dir
Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
end
def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx")))
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif")))
FileUtils.remove_dir(Settings.gpx_trace_dir)
FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end
def test_visible
@ -178,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

View file

@ -28,6 +28,9 @@ module ActiveSupport
include FactoryBot::Syntax::Methods
include ActiveJob::TestHelper
# Run tests in parallel with specified workers
parallelize(:workers => :number_of_processors)
##
# takes a block which is executed in the context of a different
# ActionController instance. this is used so that code can call methods