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 46a85ae
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 0 deletions.
2 changes: 2 additions & 0 deletions scout_apm.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Gem::Specification.new do |s|
# tests. Specific versions are pulled in using specific gemfiles, e.g.
# `gems/rails3.gemfile`.
s.add_development_dependency "activerecord"
s.add_development_dependency "actionpack"
s.add_development_dependency "actionview"
s.add_development_dependency "sqlite3"

s.add_development_dependency "rubocop"
Expand Down
6 changes: 6 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
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

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
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
require 'test_helper'
require 'action_view'
require 'action_pack'
require 'action_controller'

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

if defined?(Nokogiri::HTML4)
include ActionView::Context
include ActionView::Helpers::TagHelper
include ActionView::Helpers::TextHelper
end

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
skip if should_skip?
# enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
# a more accurate simulation of what happens in "real life".
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
skip if should_skip?

ActionView::Base.logger = nil

ActionController::Base.view_paths = @old_view_paths
end

def test_partial_instrumentation
skip if should_skip?
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

assert_equal "simple_view/Rendering", recorder.requests.first.root_layer.name
assert_equal "test/_simple_partial/Rendering", recorder.requests.first.root_layer.children.first.name
end

private

def should_skip?
!defined?(Nokogiri::HTML4)
end
end
9 changes: 9 additions & 0 deletions test/unit/instruments/fixtures/simple_view.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<html>
<head>
<title>Simple View</title>
</head>
<body>
<h1>Simple View</h1>
<%= render partial: "simple_partial", locals: { message: 'Simple Partial' } %>
</body>
</html>
3 changes: 3 additions & 0 deletions test/unit/instruments/fixtures/test/_simple_partial.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
<p><%= @message %></p>
</div>

0 comments on commit 46a85ae

Please sign in to comment.