Skip to content

Commit ccf0046

Browse files
authored
Merge pull request #528 from alpaca-tc/fix-route-tracker
Fix route tracker
2 parents 4670d07 + 400cdb6 commit ccf0046

File tree

3 files changed

+52
-9
lines changed

3 files changed

+52
-9
lines changed

lib/coverband/collectors/route_tracker.rb

+9-6
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,29 @@ def initialize(options = {})
2525
# and ensure high performance
2626
###
2727
def track_key(payload)
28-
route = if payload[:request]
28+
route = if payload.key?(:location)
29+
# For redirect.action_dispatch
30+
return unless Coverband.configuration.track_redirect_routes
31+
2932
{
3033
controller: nil,
3134
action: nil,
3235
url_path: payload[:request].path,
3336
verb: payload[:request].method
3437
}
3538
else
39+
# For start_processing.action_controller
3640
{
3741
controller: payload[:params]["controller"],
3842
action: payload[:action],
3943
url_path: nil,
4044
verb: payload[:method]
4145
}
4246
end
43-
if route
44-
if newly_seen_key?(route)
45-
@logged_keys << route
46-
@keys_to_record << route if track_key?(route)
47-
end
47+
48+
if newly_seen_key?(route)
49+
@logged_keys << route
50+
@keys_to_record << route if track_key?(route)
4851
end
4952
end
5053

lib/coverband/configuration.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Configuration
1212
:test_env, :web_enable_clear, :gem_details, :web_debug, :report_on_exit,
1313
:simulate_oneshot_lines_coverage,
1414
:view_tracker, :defer_eager_loading_data,
15-
:track_routes, :route_tracker,
15+
:track_routes, :track_redirect_routes, :route_tracker,
1616
:track_translations, :translations_tracker,
1717
:trackers, :csp_policy, :hide_settings
1818

@@ -77,6 +77,7 @@ def reset
7777
@track_views = true
7878
@view_tracker = nil
7979
@track_routes = false
80+
@track_redirect_routes = true
8081
@route_tracker = nil
8182
@track_translations = false
8283
@translations_tracker = nil

test/coverband/collectors/route_tracker_test.rb

+41-2
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,32 @@ def setup
3333
tracker = Coverband::Collectors::RouteTracker.new(store: store, roots: "dir")
3434

3535
payload = {
36-
request: Payload.new("path", "GET")
36+
request: Payload.new("path", "GET"),
37+
status: 302,
38+
location: 'https://coverband.dev/'
3739
}
3840
tracker.track_key(payload)
3941
tracker.save_report
4042
assert_equal [route_hash], tracker.logged_keys
4143
end
4244

43-
test "track controller routes" do
45+
test "track redirect routes when track_redirect_routes is false" do
46+
Coverband.configuration.track_redirect_routes = false
47+
48+
store = fake_store
49+
tracker = Coverband::Collectors::RouteTracker.new(store: store, roots: "dir")
50+
51+
payload = {
52+
request: Payload.new("path", "GET"),
53+
status: 302,
54+
location: 'https://coverband.dev/'
55+
}
56+
tracker.track_key(payload)
57+
tracker.save_report
58+
assert_equal [], tracker.logged_keys
59+
end
60+
61+
test "track controller routes in Rails < 6.1" do
4462
store = fake_store
4563
route_hash = {controller: "some/controller", action: "index", url_path: nil, verb: "GET"}
4664
store.raw_store.expects(:hset).with(tracker_key, route_hash.to_s, anything)
@@ -57,6 +75,27 @@ def setup
5775
assert_equal [route_hash], tracker.logged_keys
5876
end
5977

78+
test "track controller routes in Rails >= 6.1" do
79+
store = fake_store
80+
route_hash = {controller: "some/controller", action: "index", url_path: nil, verb: "GET"}
81+
store.raw_store.expects(:hset).with(tracker_key, route_hash.to_s, anything)
82+
tracker = Coverband::Collectors::RouteTracker.new(store: store, roots: "dir")
83+
payload = {
84+
params: {
85+
"controller"=>"some/controller",
86+
"action"=>"index"
87+
},
88+
controller: "SomeController",
89+
action: "index",
90+
path: "path",
91+
method: "GET",
92+
request: Payload.new("path", "GET")
93+
}
94+
tracker.track_key(payload)
95+
tracker.save_report
96+
assert_equal [route_hash], tracker.logged_keys
97+
end
98+
6099
test "report used routes" do
61100
store = fake_store
62101
route_hash = {controller: "some/controller", action: "index", url_path: nil, verb: "GET"}

0 commit comments

Comments
 (0)