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 # 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,11 +1,21 @@
require "test_helper" require "test_helper"
require "minitest/mock"
module Api module Api
class TracesControllerTest < ActionController::TestCase 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 def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx"))) FileUtils.remove_dir(Settings.gpx_trace_dir)
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif"))) FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end end
## ##

View file

@ -1,10 +1,20 @@
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
# 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 def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx"))) FileUtils.remove_dir(Settings.gpx_trace_dir)
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif"))) FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end end
## ##

View file

@ -19,12 +19,12 @@ 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"),
Rails.root.join("test", "gpx", "traces", "#{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"),
Rails.root.join("test", "gpx", "images", "#{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"),
Rails.root.join("test", "gpx", "images", "#{trace.id}_icon.gif")) File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif"))
end end
end end
end end

View file

@ -1,11 +1,21 @@
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
# 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 def teardown
File.unlink(*Dir.glob(File.join(Settings.gpx_trace_dir, "*.gpx"))) FileUtils.remove_dir(Settings.gpx_trace_dir)
File.unlink(*Dir.glob(File.join(Settings.gpx_image_dir, "*.gif"))) FileUtils.remove_dir(Settings.gpx_image_dir)
Settings.gpx_trace_dir = @gpx_trace_dir_orig
Settings.gpx_image_dir = @gpx_image_dir_orig
end end
def test_visible def test_visible
@ -178,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
@ -195,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
@ -212,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)
@ -226,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)
@ -240,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

View file

@ -28,6 +28,9 @@ module ActiveSupport
include FactoryBot::Syntax::Methods include FactoryBot::Syntax::Methods
include ActiveJob::TestHelper 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 # takes a block which is executed in the context of a different
# ActionController instance. this is used so that code can call methods # ActionController instance. this is used so that code can call methods