Merge remote-tracking branch 'upstream/pull/2448'
This commit is contained in:
commit
eec9e29c96
9 changed files with 94 additions and 114 deletions
1
Gemfile
1
Gemfile
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,166 +188,116 @@ 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
|
trace = create(:trace, :fixture => "a")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
# Tracepoints don't have a primary key, so we use a specific latitude to
|
||||||
trace = create(:trace, :fixture => "a")
|
# check for successful deletion
|
||||||
# Tracepoints don't have a primary key, so we use a specific latitude to
|
create(:tracepoint, :latitude => 54321, :trace => trace)
|
||||||
# check for successful deletion
|
assert_equal 1, Tracepoint.where(:latitude => 54321).count
|
||||||
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
|
assert_equal 0, Tracepoint.where(:latitude => 54321).count
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_import_creates_tracepoints
|
def test_import_creates_tracepoints
|
||||||
FakeFS do
|
trace = create(:trace, :fixture => "a")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
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
|
trace.reload
|
||||||
assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
|
assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
|
||||||
|
|
||||||
# Check that the tile has been set prior to the bulk import
|
# Check that the tile has been set prior to the bulk import
|
||||||
# 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
|
trace = create(:trace, :fixture => "a")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
|
||||||
trace = create(:trace, :fixture => "a")
|
FileUtils.rm(icon_path)
|
||||||
icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif")
|
assert_equal false, File.exist?(icon_path)
|
||||||
FileUtils.rm(icon_path)
|
|
||||||
assert_equal false, File.exist?(icon_path)
|
|
||||||
|
|
||||||
trace.import
|
trace.import
|
||||||
|
|
||||||
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
|
trace = create(:trace, :fixture => "a")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
|
||||||
trace = create(:trace, :fixture => "a")
|
FileUtils.rm(large_picture_path)
|
||||||
large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif")
|
assert_equal false, File.exist?(large_picture_path)
|
||||||
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)
|
assert_equal true, File.exist?(large_picture_path)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_import_handles_bz2
|
def test_import_handles_bz2
|
||||||
FakeFS do
|
trace = create(:trace, :fixture => "c")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace = create(:trace, :fixture => "a")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace = create(:trace, :fixture => "b")
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace.import
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace.import
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace.import
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace.import
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
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
|
trace.import
|
||||||
FakeFS::FileSystem.clone(Rails.root.join("test/gpx"))
|
|
||||||
trace.import
|
|
||||||
|
|
||||||
assert_equal 2, trace.size
|
assert_equal 2, trace.size
|
||||||
ensure
|
|
||||||
trace.destroy
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue