Write some basic functionality tests for trace.import

This commit is contained in:
Andy Allan 2019-01-23 16:47:54 +01:00
parent 3b96bbc809
commit d02e4ad461
3 changed files with 63 additions and 0 deletions

View file

@ -128,6 +128,7 @@ 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

@ -117,6 +117,7 @@ GEM
factory_bot_rails (4.11.1)
factory_bot (~> 4.11.1)
railties (>= 3.0.0)
fakefs (0.18.1)
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
ffi (1.9.25)
@ -403,6 +404,7 @@ DEPENDENCIES
delayed_job_active_record
dynamic_form
factory_bot_rails
fakefs
faraday
gd2-ffij
geoip

View file

@ -192,6 +192,66 @@ 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.import
assert_equal 0, Tracepoint.where(:latitude => 54321).count
end
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.import
trace.reload
assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count
end
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(GPX_IMAGE_DIR, "#{trace.id}_icon.gif")
FileUtils.rm(icon_path)
assert_equal false, File.exist?(icon_path)
trace.import
assert_equal true, File.exist?(icon_path)
end
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(GPX_IMAGE_DIR, "#{trace.id}.gif")
FileUtils.rm(large_picture_path)
assert_equal false, File.exist?(large_picture_path)
trace.import
assert_equal true, File.exist?(large_picture_path)
end
end
private
def check_query(query, traces)