Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jrothrock committed Jan 24, 2024
1 parent 1aef9cb commit 0cb765d
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 0 deletions.
2 changes: 2 additions & 0 deletions gems/instruments.gemfile
Expand Up @@ -4,3 +4,5 @@ gem 'httpclient'
gem 'http'
gem 'redis'
gem 'moped'
gem 'actionpack'
gem 'actionview'
6 changes: 6 additions & 0 deletions test/test_helper.rb
Expand Up @@ -65,7 +65,13 @@ def method_missing(sym)
end
end

def remove_rails_namespace
Object.send(:remove_const, "Rails") if defined?(Rails)
end

def fake_rails(version)
remove_rails_namespace if (ENV["SCOUT_TEST_FEATURES"] || "").include?("instruments")

Kernel.const_set("Rails", Module.new)
Kernel.const_set("ActionController", Module.new)
r = Kernel.const_get("Rails")
Expand Down
102 changes: 102 additions & 0 deletions test/unit/instruments/action_view_test.rb
@@ -0,0 +1,102 @@
# Most of this was taken from Rails:
# https://github.com/rails/rails/blob/v7.1.3/actionview/test/actionpack/controller/render_test.rb
# https://github.com/rails/rails/blob/v7.1.3/actionview/test/abstract_unit.rb

if (ENV["SCOUT_TEST_FEATURES"] || "").include?("instruments")
require 'test_helper'
require 'action_view'
require 'action_pack'
require 'action_controller'

FIXTURE_LOAD_PATH = File.expand_path("fixtures", __dir__)

include ActionView::Context
include ActionView::Helpers::TagHelper
include ActionView::Helpers::TextHelper

module ActionController

class Base
self.view_paths = FIXTURE_LOAD_PATH

def self.test_routes(&block)
routes = ActionDispatch::Routing::RouteSet.new
routes.draw(&block)
include routes.url_helpers
routes
end
end

class TestCase
include ActionDispatch::TestProcess

def self.with_routes(&block)
routes = ActionDispatch::Routing::RouteSet.new
routes.draw(&block)
include Module.new {
define_method(:setup) do
super()
@routes = routes
@controller.singleton_class.include @routes.url_helpers if @controller
end
}
routes
end
end
end

class TestController < ActionController::Base

def render_simple_view
render template: "simple_view"
end
end

class RenderTest < ActionController::TestCase

tests TestController

with_routes do
get :render_simple_view, to: "test#render_simple_view"
end

def setup
super
@controller.logger = ActiveSupport::Logger.new(nil)
ActionView::Base.logger = ActiveSupport::Logger.new(nil)

@request.host = "www.scoutapm.com"

@old_view_paths = ActionController::Base.view_paths
ActionController::Base.view_paths = FIXTURE_LOAD_PATH
end

def teardown
ActionView::Base.logger = nil

ActionController::Base.view_paths = @old_view_paths
end

def test_partial_instrumentation
recorder = FakeRecorder.new
agent_context.recorder = recorder

instrument = ScoutApm::Instruments::ActionView.new(agent_context)
instrument.install(prepend: true)

get :render_simple_view
assert_response :success

root_layer = recorder.requests.first.root_layer
children = root_layer.children.to_a
assert_equal 2, children.size

partial_layer = children[0]
collection_layer = children[1]

assert_equal "simple_view/Rendering", root_layer.name
assert_equal "test/_simple_partial/Rendering", partial_layer.name
assert_equal "test/_simple_partial_collection/Rendering", collection_layer.name
end
end
end
10 changes: 10 additions & 0 deletions test/unit/instruments/fixtures/simple_view.html.erb
@@ -0,0 +1,10 @@
<html>
<head>
<title>Simple View</title>
</head>
<body>
<h1>Simple View</h1>
<%= render partial: "simple_partial", locals: { message: 'Simple Partial' } %>
<%= render partial: "simple_partial_collection", collection: [1, 2, 3], as: :index %>
</body>
</html>
3 changes: 3 additions & 0 deletions test/unit/instruments/fixtures/test/_simple_partial.html.erb
@@ -0,0 +1,3 @@
<div>
<p><%= message %></p>
</div>
@@ -0,0 +1,3 @@
<div>
<p><%= index %></p>
</div>

0 comments on commit 0cb765d

Please sign in to comment.