Replace trace-related fixtures with factories.

The mocking and stubbing in the controller tests is
unfortunate, but the models interact directly with the filesystem
using the trace id so that's hard to control any other way.
This commit is contained in:
Andy Allan 2016-10-29 16:21:52 +02:00
parent f7b4793c50
commit 15689af6bf
17 changed files with 543 additions and 536 deletions

View file

@ -1,8 +1,9 @@
require "test_helper"
require "digest"
require "minitest/mock"
class TraceTest < ActiveSupport::TestCase
api_fixtures
fixtures :users
def setup
@gpx_trace_dir = Object.send("remove_const", "GPX_TRACE_DIR")
@ -20,41 +21,55 @@ class TraceTest < ActiveSupport::TestCase
Object.const_set("GPX_IMAGE_DIR", @gpx_image_dir)
end
def test_trace_count
assert_equal 10, Trace.count
end
def test_visible
check_query(Trace.visible, [
:public_trace_file, :anon_trace_file, :trackable_trace_file,
:identifiable_trace_file, :zipped_trace_file, :tar_trace_file,
:tar_gzip_trace_file, :tar_bzip_trace_file, :pending_trace_file
])
public_trace_file = create(:trace)
create(:trace, :deleted)
check_query(Trace.visible, [public_trace_file])
end
def test_visible_to
check_query(Trace.visible_to(1), [
:public_trace_file, :identifiable_trace_file, :pending_trace_file
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user))
identifiable_trace_file = create(:trace, :visibility => "identifiable", :user => users(:normal_user))
pending_trace_file = create(:trace, :visibility => "public", :user => users(:public_user), :inserted => false)
trackable_trace_file = create(:trace, :visibility => "trackable", :user => users(:public_user))
_other_trace_file = create(:trace, :visibility => "private", :user => users(:second_public_user))
check_query(Trace.visible_to(users(:normal_user).id), [
public_trace_file, identifiable_trace_file, pending_trace_file
])
check_query(Trace.visible_to(2), [
:public_trace_file, :anon_trace_file, :trackable_trace_file,
:identifiable_trace_file, :pending_trace_file
check_query(Trace.visible_to(users(:public_user)), [
public_trace_file, anon_trace_file, trackable_trace_file,
identifiable_trace_file, pending_trace_file
])
check_query(Trace.visible_to(3), [
:public_trace_file, :identifiable_trace_file, :pending_trace_file
check_query(Trace.visible_to(users(:inactive_user)), [
public_trace_file, identifiable_trace_file, pending_trace_file
])
end
def test_visible_to_all
public_trace_file = create(:trace, :visibility => "public")
_private_trace_file = create(:trace, :visibility => "private")
identifiable_trace_file = create(:trace, :visibility => "identifiable")
_trackable_trace_file = create(:trace, :visibility => "trackable")
deleted_trace_file = create(:trace, :deleted, :visibility => "public")
pending_trace_file = create(:trace, :visibility => "public", :inserted => false)
check_query(Trace.visible_to_all, [
:public_trace_file, :identifiable_trace_file,
:deleted_trace_file, :pending_trace_file
public_trace_file, identifiable_trace_file,
deleted_trace_file, pending_trace_file
])
end
def test_tagged
check_query(Trace.tagged("London"), [:public_trace_file, :anon_trace_file])
check_query(Trace.tagged("Birmingham"), [:anon_trace_file, :identifiable_trace_file])
london_trace_file = create(:trace) do |trace|
create(:tracetag, :trace => trace, :tag => "London")
end
birmingham_trace_file = create(:trace) do |trace|
create(:tracetag, :trace => trace, :tag => "Birmingham")
end
check_query(Trace.tagged("London"), [london_trace_file])
check_query(Trace.tagged("Birmingham"), [birmingham_trace_file])
check_query(Trace.tagged("Unknown"), [])
end
@ -74,7 +89,7 @@ class TraceTest < ActiveSupport::TestCase
end
def test_tagstring
trace = Trace.new(gpx_files(:public_trace_file).attributes)
trace = build(:trace)
trace.tagstring = "foo bar baz"
assert trace.valid?
assert_equal 3, trace.tags.length
@ -92,66 +107,71 @@ class TraceTest < ActiveSupport::TestCase
end
def test_public?
assert_equal true, gpx_files(:public_trace_file).public?
assert_equal false, gpx_files(:anon_trace_file).public?
assert_equal false, gpx_files(:trackable_trace_file).public?
assert_equal true, gpx_files(:identifiable_trace_file).public?
assert_equal true, gpx_files(:deleted_trace_file).public?
assert_equal true, build(:trace, :visibility => "public").public?
assert_equal false, build(:trace, :visibility => "private").public?
assert_equal false, build(:trace, :visibility => "trackable").public?
assert_equal true, build(:trace, :visibility => "identifiable").public?
assert_equal true, build(:trace, :deleted, :visibility => "public").public?
end
def test_trackable?
assert_equal false, gpx_files(:public_trace_file).trackable?
assert_equal false, gpx_files(:anon_trace_file).trackable?
assert_equal true, gpx_files(:trackable_trace_file).trackable?
assert_equal true, gpx_files(:identifiable_trace_file).trackable?
assert_equal false, gpx_files(:deleted_trace_file).trackable?
assert_equal false, build(:trace, :visibility => "public").trackable?
assert_equal false, build(:trace, :visibility => "private").trackable?
assert_equal true, build(:trace, :visibility => "trackable").trackable?
assert_equal true, build(:trace, :visibility => "identifiable").trackable?
assert_equal false, build(:trace, :deleted, :visibility => "public").trackable?
end
def test_identifiable?
assert_equal false, gpx_files(:public_trace_file).identifiable?
assert_equal false, gpx_files(:anon_trace_file).identifiable?
assert_equal false, gpx_files(:trackable_trace_file).identifiable?
assert_equal true, gpx_files(:identifiable_trace_file).identifiable?
assert_equal false, gpx_files(:deleted_trace_file).identifiable?
assert_equal false, build(:trace, :visibility => "public").identifiable?
assert_equal false, build(:trace, :visibility => "private").identifiable?
assert_equal false, build(:trace, :visibility => "trackable").identifiable?
assert_equal true, build(:trace, :visibility => "identifiable").identifiable?
assert_equal false, build(:trace, :deleted, :visibility => "public").identifiable?
end
def test_mime_type
assert_equal "application/gpx+xml", gpx_files(:public_trace_file).mime_type
assert_equal "application/gpx+xml", gpx_files(:anon_trace_file).mime_type
assert_equal "application/x-bzip2", gpx_files(:trackable_trace_file).mime_type
assert_equal "application/x-gzip", gpx_files(:identifiable_trace_file).mime_type
assert_equal "application/x-zip", gpx_files(:zipped_trace_file).mime_type
assert_equal "application/x-tar", gpx_files(:tar_trace_file).mime_type
assert_equal "application/x-gzip", gpx_files(:tar_gzip_trace_file).mime_type
assert_equal "application/x-bzip2", gpx_files(:tar_bzip_trace_file).mime_type
# The ids refer to the .gpx fixtures in test/traces
check_mime_type(1, "application/gpx+xml")
check_mime_type(2, "application/gpx+xml")
check_mime_type(3, "application/x-bzip2")
check_mime_type(4, "application/x-gzip")
check_mime_type(6, "application/x-zip")
check_mime_type(7, "application/x-tar")
check_mime_type(8, "application/x-gzip")
check_mime_type(9, "application/x-bzip2")
end
def test_extension_name
assert_equal ".gpx", gpx_files(:public_trace_file).extension_name
assert_equal ".gpx", gpx_files(:anon_trace_file).extension_name
assert_equal ".gpx.bz2", gpx_files(:trackable_trace_file).extension_name
assert_equal ".gpx.gz", gpx_files(:identifiable_trace_file).extension_name
assert_equal ".zip", gpx_files(:zipped_trace_file).extension_name
assert_equal ".tar", gpx_files(:tar_trace_file).extension_name
assert_equal ".tar.gz", gpx_files(:tar_gzip_trace_file).extension_name
assert_equal ".tar.bz2", gpx_files(:tar_bzip_trace_file).extension_name
# The ids refer to the .gpx fixtures in test/traces
check_extension_name(1, ".gpx")
check_extension_name(2, ".gpx")
check_extension_name(3, ".gpx.bz2")
check_extension_name(4, ".gpx.gz")
check_extension_name(6, ".zip")
check_extension_name(7, ".tar")
check_extension_name(8, ".tar.gz")
check_extension_name(9, ".tar.bz2")
end
def test_xml_file
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:public_trace_file).xml_file)
assert_equal "66179ca44f1e93d8df62e2b88cbea732", md5sum(gpx_files(:anon_trace_file).xml_file)
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:trackable_trace_file).xml_file)
assert_equal "abd6675fdf3024a84fc0a1deac147c0d", md5sum(gpx_files(:identifiable_trace_file).xml_file)
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:zipped_trace_file).xml_file)
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:tar_trace_file).xml_file)
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:tar_gzip_trace_file).xml_file)
assert_equal "848caa72f2f456d1bd6a0fdf228aa1b9", md5sum(gpx_files(:tar_bzip_trace_file).xml_file)
check_xml_file(1, "848caa72f2f456d1bd6a0fdf228aa1b9")
check_xml_file(2, "66179ca44f1e93d8df62e2b88cbea732")
check_xml_file(3, "848caa72f2f456d1bd6a0fdf228aa1b9")
check_xml_file(4, "abd6675fdf3024a84fc0a1deac147c0d")
check_xml_file(6, "848caa72f2f456d1bd6a0fdf228aa1b9")
check_xml_file(7, "848caa72f2f456d1bd6a0fdf228aa1b9")
check_xml_file(8, "848caa72f2f456d1bd6a0fdf228aa1b9")
check_xml_file(9, "848caa72f2f456d1bd6a0fdf228aa1b9")
end
def test_large_picture
picture = gpx_files(:public_trace_file).large_picture
trace = Trace.create
trace = create(:trace)
picture = trace.stub :large_picture_name, "#{GPX_IMAGE_DIR}/1.gif" do
trace.large_picture
end
trace = Trace.create
trace.large_picture = picture
assert_equal "7c841749e084ee4a5d13f12cd3bef456", md5sum(File.new(trace.large_picture_name))
assert_equal picture, trace.large_picture
@ -160,9 +180,12 @@ class TraceTest < ActiveSupport::TestCase
end
def test_icon_picture
picture = gpx_files(:public_trace_file).icon_picture
trace = Trace.create
trace = create(:trace)
picture = trace.stub :icon_picture_name, "#{GPX_IMAGE_DIR}/1_icon.gif" do
trace.icon_picture
end
trace = Trace.create
trace.icon_picture = picture
assert_equal "b47baf22ed0e85d77e808694fad0ee27", md5sum(File.new(trace.icon_picture_name))
assert_equal picture, trace.icon_picture
@ -173,12 +196,33 @@ class TraceTest < ActiveSupport::TestCase
private
def check_query(query, traces)
traces = traces.map { |t| gpx_files(t).id }.sort
traces = traces.map { |t| t.id }.sort
assert_equal traces, query.order(:id).ids
end
def check_mime_type(id, mime_type)
trace = create(:trace)
trace.stub :trace_name, "#{GPX_TRACE_DIR}/#{id}.gpx" do
assert_equal mime_type, trace.mime_type
end
end
def check_extension_name(id, extension_name)
trace = create(:trace)
trace.stub :trace_name, "#{GPX_TRACE_DIR}/#{id}.gpx" do
assert_equal extension_name, trace.extension_name
end
end
def check_xml_file(id, md5sum)
trace = create(:trace)
trace.stub :trace_name, "#{GPX_TRACE_DIR}/#{id}.gpx" do
assert_equal md5sum, md5sum(trace.xml_file)
end
end
def trace_valid(attrs, result = true)
entry = Trace.new(gpx_files(:public_trace_file).attributes)
entry = build(:trace)
entry.assign_attributes(attrs)
assert_equal result, entry.valid?, "Expected #{attrs.inspect} to be #{result}"
end

View file

@ -1,9 +1,10 @@
require "test_helper"
class TracepointTest < ActiveSupport::TestCase
api_fixtures
def test_tracepoint_count
assert_equal 4, Tracepoint.count
def test_timestamp_required
tracepoint = create(:tracepoint)
assert tracepoint.valid?
tracepoint.timestamp = nil
assert !tracepoint.valid?
end
end

View file

@ -1,12 +1,6 @@
require "test_helper"
class TracetagTest < ActiveSupport::TestCase
api_fixtures
def test_tracetag_count
assert_equal 4, Tracetag.count
end
def test_validations
tracetag_valid({})
tracetag_valid({ :tag => nil }, false)
@ -24,7 +18,7 @@ class TracetagTest < ActiveSupport::TestCase
private
def tracetag_valid(attrs, result = true)
entry = Tracetag.new(gpx_file_tags(:first_trace_1).attributes)
entry = build(:tracetag)
entry.assign_attributes(attrs)
assert_equal result, entry.valid?, "Expected #{attrs.inspect} to be #{result}"
end