Use stub_any_instance in order to stub find results.

This is a much cleaner approach than before.
This commit is contained in:
Andy Allan 2016-10-30 10:22:10 +01:00
parent ea502ac9df
commit a32333ba12
3 changed files with 88 additions and 117 deletions

View file

@ -101,6 +101,7 @@ group :test do
gem "rubocop" gem "rubocop"
gem "timecop" gem "timecop"
gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20] gem "minitest", "~> 5.1", :platforms => [:ruby_19, :ruby_20]
gem "minitest-stub_any_instance"
end end
# Needed in development as well so rake can see konacha tasks # Needed in development as well so rake can see konacha tasks

View file

@ -150,6 +150,7 @@ GEM
mimemagic (0.3.0) mimemagic (0.3.0)
mini_portile2 (2.1.0) mini_portile2 (2.1.0)
minitest (5.9.1) minitest (5.9.1)
minitest-stub_any_instance (1.0.1)
multi_json (1.12.1) multi_json (1.12.1)
multi_xml (0.5.5) multi_xml (0.5.5)
multipart-post (2.0.0) multipart-post (2.0.0)
@ -334,6 +335,7 @@ DEPENDENCIES
libxml-ruby (>= 2.0.5) libxml-ruby (>= 2.0.5)
logstasher logstasher
minitest (~> 5.1) minitest (~> 5.1)
minitest-stub_any_instance
oauth-plugin (>= 0.5.1) oauth-plugin (>= 0.5.1)
omniauth omniauth
omniauth-facebook omniauth-facebook

View file

@ -305,10 +305,7 @@ class TraceControllerTest < ActionController::TestCase
# Test downloading a trace # Test downloading a trace
def test_data def test_data
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user)) public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
# We need to stub both the trace_name, to control which file from test/traces is used, Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/1.gpx" do
# and also the Trace.find method so that our stubbed object is used by the controller.
public_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/1.gpx" do
Trace.stub :find, public_trace_file do
# First with no auth, which should work since the trace is public # First with no auth, which should work since the trace is public
get :data, :display_name => users(:normal_user).display_name, :id => public_trace_file.id get :data, :display_name => users(:normal_user).display_name, :id => public_trace_file.id
check_trace_data public_trace_file check_trace_data public_trace_file
@ -322,13 +319,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data public_trace_file check_trace_data public_trace_file
end end
end end
end
# Test downloading a compressed trace # Test downloading a compressed trace
def test_data_compressed def test_data_compressed
identifiable_trace_file = create(:trace, :visibility => "identifiable") identifiable_trace_file = create(:trace, :visibility => "identifiable")
identifiable_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/4.gpx" do Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/4.gpx" do
Trace.stub :find, identifiable_trace_file do
# First get the data as is # First get the data as is
get :data, :display_name => users(:public_user).display_name, :id => identifiable_trace_file.id get :data, :display_name => users(:public_user).display_name, :id => identifiable_trace_file.id
check_trace_data identifiable_trace_file, "application/x-gzip", "gpx.gz" check_trace_data identifiable_trace_file, "application/x-gzip", "gpx.gz"
@ -342,12 +337,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data identifiable_trace_file check_trace_data identifiable_trace_file
end end
end end
end
# Check an anonymous trace can't be downloaded by another user # Check an anonymous trace can't be downloaded by another user
def test_data_anon def test_data_anon
anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user)) anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user))
anon_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/2.gpx" do Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/2.gpx" do
# First with no auth # First with no auth
get :data, :display_name => users(:public_user).display_name, :id => anon_trace_file.id get :data, :display_name => users(:public_user).display_name, :id => anon_trace_file.id
assert_response :not_found assert_response :not_found
@ -357,12 +351,10 @@ class TraceControllerTest < ActionController::TestCase
assert_response :not_found assert_response :not_found
# And finally we should be able to do it with the owner of the trace # And finally we should be able to do it with the owner of the trace
Trace.stub :find, anon_trace_file do
get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id } get :data, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
check_trace_data anon_trace_file check_trace_data anon_trace_file
end end
end end
end
# Test downloading a trace that doesn't exist # Test downloading a trace that doesn't exist
def test_data_not_found def test_data_not_found
@ -383,8 +375,7 @@ class TraceControllerTest < ActionController::TestCase
# Test downloading the picture for a trace # Test downloading the picture for a trace
def test_picture def test_picture
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user)) public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
public_trace_file.stub :large_picture_name, "#{GPX_TRACE_DIR}/1.gif" do Trace.stub_any_instance :large_picture_name, "#{GPX_TRACE_DIR}/1.gif" do
Trace.stub :find, public_trace_file do
# First with no auth, which should work since the trace is public # First with no auth, which should work since the trace is public
get :picture, :display_name => users(:normal_user).display_name, :id => public_trace_file.id get :picture, :display_name => users(:normal_user).display_name, :id => public_trace_file.id
check_trace_picture public_trace_file check_trace_picture public_trace_file
@ -398,12 +389,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_picture public_trace_file check_trace_picture public_trace_file
end end
end end
end
# Check the picture for an anonymous trace can't be downloaded by another user # Check the picture for an anonymous trace can't be downloaded by another user
def test_picture_anon def test_picture_anon
anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user)) anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user))
anon_trace_file.stub :large_picture_name, "#{GPX_TRACE_DIR}/2.gif" do Trace.stub_any_instance :large_picture_name, "#{GPX_TRACE_DIR}/2.gif" do
# First with no auth # First with no auth
get :picture, :display_name => users(:public_user).display_name, :id => anon_trace_file.id get :picture, :display_name => users(:public_user).display_name, :id => anon_trace_file.id
assert_response :forbidden assert_response :forbidden
@ -413,12 +403,10 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden assert_response :forbidden
# And finally we should be able to do it with the owner of the trace # And finally we should be able to do it with the owner of the trace
Trace.stub :find, anon_trace_file do
get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id } get :picture, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
check_trace_picture anon_trace_file check_trace_picture anon_trace_file
end end
end end
end
# Test downloading the picture for a trace that doesn't exist # Test downloading the picture for a trace that doesn't exist
def test_picture_not_found def test_picture_not_found
@ -439,8 +427,7 @@ class TraceControllerTest < ActionController::TestCase
# Test downloading the icon for a trace # Test downloading the icon for a trace
def test_icon def test_icon
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user)) public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
public_trace_file.stub :icon_picture_name, "#{GPX_TRACE_DIR}/1_icon.gif" do Trace.stub_any_instance :icon_picture_name, "#{GPX_TRACE_DIR}/1_icon.gif" do
Trace.stub :find, public_trace_file do
# First with no auth, which should work since the trace is public # First with no auth, which should work since the trace is public
get :icon, :display_name => users(:normal_user).display_name, :id => public_trace_file.id get :icon, :display_name => users(:normal_user).display_name, :id => public_trace_file.id
check_trace_icon public_trace_file check_trace_icon public_trace_file
@ -454,12 +441,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_icon public_trace_file check_trace_icon public_trace_file
end end
end end
end
# Check the icon for an anonymous trace can't be downloaded by another user # Check the icon for an anonymous trace can't be downloaded by another user
def test_icon_anon def test_icon_anon
anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user)) anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user))
anon_trace_file.stub :icon_picture_name, "#{GPX_TRACE_DIR}/2_icon.gif" do Trace.stub_any_instance :icon_picture_name, "#{GPX_TRACE_DIR}/2_icon.gif" do
# First with no auth # First with no auth
get :icon, :display_name => users(:public_user).display_name, :id => anon_trace_file.id get :icon, :display_name => users(:public_user).display_name, :id => anon_trace_file.id
assert_response :forbidden assert_response :forbidden
@ -469,12 +455,10 @@ class TraceControllerTest < ActionController::TestCase
assert_response :forbidden assert_response :forbidden
# And finally we should be able to do it with the owner of the trace # And finally we should be able to do it with the owner of the trace
Trace.stub :find, anon_trace_file do
get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id } get :icon, { :display_name => users(:public_user).display_name, :id => anon_trace_file.id }, { :user => users(:public_user).id }
check_trace_icon anon_trace_file check_trace_icon anon_trace_file
end end
end end
end
# Test downloading the icon for a trace that doesn't exist # Test downloading the icon for a trace that doesn't exist
def test_icon_not_found def test_icon_not_found
@ -699,11 +683,7 @@ class TraceControllerTest < ActionController::TestCase
# Test downloading a trace through the api # Test downloading a trace through the api
def test_api_data def test_api_data
public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user)) public_trace_file = create(:trace, :visibility => "public", :user => users(:normal_user))
public_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/1.gpx" do Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/1.gpx" do
visible = MiniTest::Mock.new
visible.expect :find, public_trace_file, [String]
visible.expect :find, public_trace_file, [String]
Trace.stub :visible, visible do
# First with no auth # First with no auth
get :api_data, :display_name => users(:normal_user).display_name, :id => public_trace_file.id get :api_data, :display_name => users(:normal_user).display_name, :id => public_trace_file.id
assert_response :unauthorized assert_response :unauthorized
@ -719,17 +699,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data public_trace_file check_trace_data public_trace_file
end end
end end
end
# Test downloading a compressed trace through the api # Test downloading a compressed trace through the api
def test_api_data_compressed def test_api_data_compressed
identifiable_trace_file = create(:trace, :visibility => "identifiable", :user => users(:public_user)) identifiable_trace_file = create(:trace, :visibility => "identifiable", :user => users(:public_user))
identifiable_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/4.gpx" do Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/4.gpx" do
visible = MiniTest::Mock.new
visible.expect :find, identifiable_trace_file, [String]
visible.expect :find, identifiable_trace_file, [String]
visible.expect :find, identifiable_trace_file, [String]
Trace.stub :visible, visible do
# Authenticate as the owner of the trace we will be using # Authenticate as the owner of the trace we will be using
basic_authorization(users(:public_user).display_name, "test") basic_authorization(users(:public_user).display_name, "test")
@ -746,16 +720,11 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data identifiable_trace_file check_trace_data identifiable_trace_file
end end
end end
end
# Check an anonymous trace can't be downloaded by another user through the api # Check an anonymous trace can't be downloaded by another user through the api
def test_api_data_anon def test_api_data_anon
anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user)) anon_trace_file = create(:trace, :visibility => "private", :user => users(:public_user))
anon_trace_file.stub :trace_name, "#{GPX_TRACE_DIR}/2.gpx" do Trace.stub_any_instance :trace_name, "#{GPX_TRACE_DIR}/2.gpx" do
visible = MiniTest::Mock.new
visible.expect :find, anon_trace_file, [String]
visible.expect :find, anon_trace_file, [String]
Trace.stub :visible, visible do
# First with no auth # First with no auth
get :api_data, :display_name => users(:public_user).display_name, :id => anon_trace_file.id get :api_data, :display_name => users(:public_user).display_name, :id => anon_trace_file.id
assert_response :unauthorized assert_response :unauthorized
@ -771,7 +740,6 @@ class TraceControllerTest < ActionController::TestCase
check_trace_data anon_trace_file check_trace_data anon_trace_file
end end
end end
end
# Test downloading a trace that doesn't exist through the api # Test downloading a trace that doesn't exist through the api
def test_api_data_not_found def test_api_data_not_found