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
|
||||
group :test do
|
||||
gem "fakefs", :require => "fakefs/safe"
|
||||
gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
|
||||
gem "rails-controller-testing"
|
||||
gem "rubocop"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
##
|
||||
|
|
|
@ -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
|
||||
|
||||
##
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue