|
96 | 96 | before do |
97 | 97 | allow(request).to receive(:env).and_return({ |
98 | 98 | 'action_dispatch.routes' => route_set, |
99 | | - 'action_dispatch.request.path_parameters' => {} |
| 99 | + 'action_dispatch.request.path_parameters' => {}, |
| 100 | + 'PATH_INFO' => '/users/1' |
100 | 101 | }) |
101 | 102 | end |
102 | 103 |
|
103 | 104 | let(:router) { double('ActionDispatch::Routing::RouteSet::Router') } |
104 | 105 | let(:route_set) { double('ActionDispatch::Routing::RouteSet', router: router) } |
105 | | - let(:request) { double('Rack::Request', env: {}, script_name: '', path: '/users/1') } |
| 106 | + let(:request) { double('Rack::Request', script_name: '', path: '/users/1') } |
106 | 107 |
|
107 | | - it { expect(described_class.route_pattern(request)).to eq('/users/1') } |
| 108 | + it { expect(described_class.route_pattern(request)).to eq('/users/{param:int}') } |
| 109 | + |
| 110 | + it 'persists inferred route in the request env' do |
| 111 | + expect { described_class.route_pattern(request) } |
| 112 | + .to change { request.env[Datadog::Tracing::Contrib::Rack::RouteInference::DATADOG_INFERRED_ROUTE_ENV_KEY] } |
| 113 | + .from(nil).to('/users/{param:int}') |
| 114 | + end |
108 | 115 | end |
109 | 116 |
|
110 | 117 | context 'when route_uri_pattern is not set and request path_parameters is present' do |
|
130 | 137 | let(:action_dispatch_request) { double('ActionDispatch::Request', env: {}, script_name: '', path: '/users/1') } |
131 | 138 |
|
132 | 139 | it 'uses action dispatch request for route recognition' do |
133 | | - expect(router).to receive(:recognize).with(action_dispatch_request).and_return('/users/1') |
134 | | - expect(described_class.route_pattern(request)).to eq('/users/1') |
| 140 | + expect(router).to receive(:recognize).with(action_dispatch_request).and_return('/users/:id(.:format)') |
| 141 | + expect(described_class.route_pattern(request)).to eq('/users/:id') |
135 | 142 | end |
136 | 143 | end |
137 | 144 |
|
|
143 | 150 | let(:request) { double('Rack::Request', env: {}, script_name: '', path: '/users/1', head?: false) } |
144 | 151 |
|
145 | 152 | it 'uses action dispatch request for route recognition' do |
146 | | - expect(router).to receive(:recognize).with(request).and_return('/users/1') |
147 | | - expect(described_class.route_pattern(request)).to eq('/users/1') |
| 153 | + expect(router).to receive(:recognize).with(request).and_return('/users/:id(.:format)') |
| 154 | + expect(described_class.route_pattern(request)).to eq('/users/:id') |
148 | 155 | end |
149 | 156 | end |
150 | 157 | end |
151 | 158 |
|
152 | 159 | context 'when Rails router cannot recognize request' do |
153 | 160 | before do |
154 | | - allow(request).to receive(:env).and_return({'action_dispatch.routes' => route_set}) |
155 | | - allow(request).to receive(:path).and_return('/unmatched/route') |
| 161 | + allow(request).to receive(:env).and_return({ |
| 162 | + 'action_dispatch.routes' => route_set, |
| 163 | + 'PATH_INFO' => '/unmatched/route' |
| 164 | + }) |
156 | 165 | allow(router).to receive(:recognize).with(request).and_return([]) |
157 | 166 | end |
158 | 167 |
|
|
169 | 178 | end |
170 | 179 |
|
171 | 180 | context 'when route has nested path' do |
172 | | - before { allow(request).to receive(:path).and_return('/some/other/path') } |
| 181 | + before { allow(request).to receive(:env).and_return({'PATH_INFO' => '/some/other/path'}) } |
173 | 182 |
|
174 | 183 | it { expect(described_class.route_pattern(request)).to eq('/some/other/path') } |
175 | 184 | end |
|
0 commit comments