X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/7a1615bc55aee72dd03a5dd43c08b4f13f669f06..7df13ff2d3b369b571b6d85fd1a2997290c5541f:/test/models/trace_test.rb diff --git a/test/models/trace_test.rb b/test/models/trace_test.rb index bf4e0196b..f95ebe4c3 100644 --- a/test/models/trace_test.rb +++ b/test/models/trace_test.rb @@ -2,22 +2,6 @@ require "test_helper" require "gpx" 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 - 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 public_trace_file = create(:trace) create(:trace, :deleted) @@ -76,30 +60,34 @@ class TraceTest < ActiveSupport::TestCase def test_validations trace_valid({}) - trace_valid({ :user_id => nil }, false) - trace_valid(:name => "a" * 255) - trace_valid({ :name => "a" * 256 }, false) - trace_valid({ :description => nil }, false) - trace_valid(:description => "a" * 255) - trace_valid({ :description => "a" * 256 }, false) - trace_valid(:visibility => "private") - trace_valid(:visibility => "public") - trace_valid(:visibility => "trackable") - trace_valid(:visibility => "identifiable") - trace_valid({ :visibility => "foo" }, false) - end - - def test_tagstring + trace_valid({ :user_id => nil }, :valid => false) + trace_valid({ :name => "a" * 255 }) + trace_valid({ :name => "a" * 256 }, :valid => false) + trace_valid({ :description => nil }, :valid => false) + trace_valid({ :description => "a" * 255 }) + trace_valid({ :description => "a" * 256 }, :valid => false) + trace_valid({ :visibility => "private" }) + trace_valid({ :visibility => "public" }) + trace_valid({ :visibility => "trackable" }) + trace_valid({ :visibility => "identifiable" }) + trace_valid({ :visibility => "foo" }, :valid => false) + end + + def test_tagstring_handles_space_separated_tags trace = build(:trace) trace.tagstring = "foo bar baz" - assert trace.valid? + assert_predicate trace, :valid? assert_equal 3, trace.tags.length assert_equal "foo", trace.tags[0].tag assert_equal "bar", trace.tags[1].tag assert_equal "baz", trace.tags[2].tag assert_equal "foo, bar, baz", trace.tagstring + end + + def test_tagstring_handles_comma_separated_tags + trace = build(:trace) trace.tagstring = "foo, bar baz ,qux" - assert trace.valid? + assert_predicate trace, :valid? assert_equal 3, trace.tags.length assert_equal "foo", trace.tags[0].tag assert_equal "bar baz", trace.tags[1].tag @@ -107,28 +95,39 @@ class TraceTest < ActiveSupport::TestCase assert_equal "foo, bar baz, qux", trace.tagstring end + def test_tagstring_strips_whitespace + trace = build(:trace) + trace.tagstring = " zero , one , two " + assert_predicate trace, :valid? + assert_equal 3, trace.tags.length + assert_equal "zero", trace.tags[0].tag + assert_equal "one", trace.tags[1].tag + assert_equal "two", trace.tags[2].tag + assert_equal "zero, one, two", trace.tagstring + end + def test_public? - assert build(:trace, :visibility => "public").public? - assert_not build(:trace, :visibility => "private").public? - assert_not build(:trace, :visibility => "trackable").public? - assert build(:trace, :visibility => "identifiable").public? - assert build(:trace, :deleted, :visibility => "public").public? + assert_predicate build(:trace, :visibility => "public"), :public? + assert_not_predicate build(:trace, :visibility => "private"), :public? + assert_not_predicate build(:trace, :visibility => "trackable"), :public? + assert_predicate build(:trace, :visibility => "identifiable"), :public? + assert_predicate build(:trace, :deleted, :visibility => "public"), :public? end def test_trackable? - assert_not build(:trace, :visibility => "public").trackable? - assert_not build(:trace, :visibility => "private").trackable? - assert build(:trace, :visibility => "trackable").trackable? - assert build(:trace, :visibility => "identifiable").trackable? - assert_not build(:trace, :deleted, :visibility => "public").trackable? + assert_not_predicate build(:trace, :visibility => "public"), :trackable? + assert_not_predicate build(:trace, :visibility => "private"), :trackable? + assert_predicate build(:trace, :visibility => "trackable"), :trackable? + assert_predicate build(:trace, :visibility => "identifiable"), :trackable? + assert_not_predicate build(:trace, :deleted, :visibility => "public"), :trackable? end def test_identifiable? - assert_not build(:trace, :visibility => "public").identifiable? - assert_not build(:trace, :visibility => "private").identifiable? - assert_not build(:trace, :visibility => "trackable").identifiable? - assert build(:trace, :visibility => "identifiable").identifiable? - assert_not build(:trace, :deleted, :visibility => "public").identifiable? + assert_not_predicate build(:trace, :visibility => "public"), :identifiable? + assert_not_predicate build(:trace, :visibility => "private"), :identifiable? + assert_not_predicate build(:trace, :visibility => "trackable"), :identifiable? + assert_predicate build(:trace, :visibility => "identifiable"), :identifiable? + assert_not_predicate build(:trace, :deleted, :visibility => "public"), :identifiable? end def test_mime_type @@ -136,11 +135,11 @@ class TraceTest < ActiveSupport::TestCase check_mime_type("a", "application/gpx+xml") check_mime_type("b", "application/gpx+xml") check_mime_type("c", "application/x-bzip2") - check_mime_type("d", "application/x-gzip") - check_mime_type("f", "application/x-zip") + check_mime_type("d", "application/gzip") + check_mime_type("f", "application/zip") check_mime_type("g", "application/x-tar") - check_mime_type("h", "application/x-gzip") - check_mime_type("i", "application/x-bzip2") + check_mime_type("h", "application/x-tar+gzip") + check_mime_type("i", "application/x-tar+x-bzip2") end def test_extension_name @@ -167,25 +166,17 @@ class TraceTest < ActiveSupport::TestCase end def test_large_picture - picture = File.read(Rails.root.join("test/gpx/fixtures/a.gif"), :mode => "rb") + picture = Rails.root.join("test/gpx/fixtures/a.gif").read(:mode => "rb") + trace = create(:trace, :fixture => "a") - trace = Trace.create - trace.large_picture = picture - assert_equal "7c841749e084ee4a5d13f12cd3bef456", md5sum(File.new(trace.large_picture_name)) assert_equal picture, trace.large_picture - - trace.destroy end def test_icon_picture - picture = File.read(Rails.root.join("test/gpx/fixtures/a_icon.gif"), :mode => "rb") + picture = Rails.root.join("test/gpx/fixtures/a_icon.gif").read(:mode => "rb") + trace = create(:trace, :fixture => "a") - trace = Trace.create - trace.icon_picture = picture - assert_equal "b47baf22ed0e85d77e808694fad0ee27", md5sum(File.new(trace.icon_picture_name)) assert_equal picture, trace.icon_picture - - trace.destroy end def test_import_removes_previous_tracepoints @@ -202,42 +193,40 @@ class TraceTest < ActiveSupport::TestCase def test_import_creates_tracepoints trace = create(:trace, :fixture => "a") - assert_equal 0, Tracepoint.where(:gpx_id => trace.id).count + assert_equal 0, Tracepoint.where(:trace => trace).count trace.import trace.reload - assert_equal 1, Tracepoint.where(:gpx_id => trace.id).count + assert_equal 1, Tracepoint.where(:trace => trace).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 + assert_equal 3221331576, Tracepoint.find_by(:trace => trace).tile end def test_import_creates_icon - trace = create(:trace, :fixture => "a") - icon_path = File.join(Settings.gpx_image_dir, "#{trace.id}_icon.gif") - FileUtils.rm(icon_path) - assert_not File.exist?(icon_path) + trace = create(:trace, :inserted => false, :fixture => "a") + + assert_not_predicate trace.icon, :attached? trace.import - assert File.exist?(icon_path) + assert_predicate trace.icon, :attached? end def test_import_creates_large_picture - trace = create(:trace, :fixture => "a") - large_picture_path = File.join(Settings.gpx_image_dir, "#{trace.id}.gif") - FileUtils.rm(large_picture_path) - assert_not File.exist?(large_picture_path) + trace = create(:trace, :inserted => false, :fixture => "a") + + assert_not_predicate trace.image, :attached? trace.import - assert File.exist?(large_picture_path) + assert_predicate trace.image, :attached? end def test_import_handles_bz2 - trace = create(:trace, :fixture => "c") + trace = create(:trace, :inserted => false, :fixture => "c") trace.import @@ -245,7 +234,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_plain - trace = create(:trace, :fixture => "a") + trace = create(:trace, :inserted => false, :fixture => "a") trace.import @@ -253,7 +242,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_plain_with_bom - trace = create(:trace, :fixture => "b") + trace = create(:trace, :inserted => false, :fixture => "b") trace.import @@ -261,7 +250,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_gz - trace = create(:trace, :fixture => "d") + trace = create(:trace, :inserted => false, :fixture => "d") trace.import @@ -269,7 +258,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_zip - trace = create(:trace, :fixture => "f") + trace = create(:trace, :inserted => false, :fixture => "f") trace.import @@ -277,7 +266,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_tar - trace = create(:trace, :fixture => "g") + trace = create(:trace, :inserted => false, :fixture => "g") trace.import @@ -285,7 +274,7 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_tar_gz - trace = create(:trace, :fixture => "h") + trace = create(:trace, :inserted => false, :fixture => "h") trace.import @@ -293,13 +282,25 @@ class TraceTest < ActiveSupport::TestCase end def test_import_handles_tar_bz2 - trace = create(:trace, :fixture => "i") + trace = create(:trace, :inserted => false, :fixture => "i") trace.import assert_equal 2, trace.size end + def test_import_enforces_limit + trace = create(:trace, :inserted => false, :fixture => "f") + + with_settings(:max_trace_size => 1) do + assert_raise GPX::FileTooBigError do + trace.import + end + end + + assert_not trace.inserted + end + private def check_query(query, traces) @@ -319,9 +320,9 @@ class TraceTest < ActiveSupport::TestCase assert_equal md5sum, md5sum(create(:trace, :fixture => id).xml_file) end - def trace_valid(attrs, result = true) + def trace_valid(attrs, valid: true) entry = build(:trace, attrs) - assert_equal result, entry.valid?, "Expected #{attrs.inspect} to be #{result}" + assert_equal valid, entry.valid?, "Expected #{attrs.inspect} to be #{valid}" end def md5sum(io)