|
92 | 92 | it { expect(described_class.route_pattern(request)).to eq('/api/v1/users/:id/posts/:post_id') } |
93 | 93 | end |
94 | 94 |
|
95 | | - context 'when route_uri_pattern is not set, but request path parameters are present' do |
| 95 | + context 'when route_uri_pattern is not set and request path_parameters is empty' do |
96 | 96 | before do |
97 | 97 | allow(request).to receive(:env).and_return({ |
98 | 98 | 'action_dispatch.routes' => route_set, |
|
107 | 107 | it { expect(described_class.route_pattern(request)).to eq('/users/1') } |
108 | 108 | end |
109 | 109 |
|
| 110 | + context 'when route_uri_pattern is not set and request path_parameters is present' do |
| 111 | + let(:env) do |
| 112 | + { |
| 113 | + 'action_dispatch.routes' => route_set, |
| 114 | + 'action_dispatch.request.path_parameters' => { |
| 115 | + 'controller' => 'users', 'action' => 'show', 'id' => '1' |
| 116 | + } |
| 117 | + } |
| 118 | + end |
| 119 | + |
| 120 | + context 'when request is HEAD' do |
| 121 | + before do |
| 122 | + allow(request).to receive(:env).and_return(env) |
| 123 | + allow(action_dispatch_request).to receive(:env).and_return(env) |
| 124 | + end |
| 125 | + |
| 126 | + let(:router) { double('ActionDispatch::Routing::RouteSet::Router') } |
| 127 | + let(:route_set) { double('ActionDispatch::Routing::RouteSet', router: router, request_class: action_dispatch_request_class) } |
| 128 | + let(:request) { double('Rack::Request', env: {}, script_name: '', path: '/users/1', head?: true) } |
| 129 | + let(:action_dispatch_request_class) { double('class ActionDispatch::Request', new: action_dispatch_request) } |
| 130 | + let(:action_dispatch_request) { double('ActionDispatch::Request', env: {}, script_name: '', path: '/users/1') } |
| 131 | + |
| 132 | + 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') |
| 135 | + end |
| 136 | + end |
| 137 | + |
| 138 | + context 'when request is not HEAD' do |
| 139 | + before { allow(request).to receive(:env).and_return(env) } |
| 140 | + |
| 141 | + let(:router) { double('ActionDispatch::Routing::RouteSet::Router') } |
| 142 | + let(:route_set) { double('ActionDispatch::Routing::RouteSet', router: router) } |
| 143 | + let(:request) { double('Rack::Request', env: {}, script_name: '', path: '/users/1', head?: false) } |
| 144 | + |
| 145 | + 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') |
| 148 | + end |
| 149 | + end |
| 150 | + end |
| 151 | + |
110 | 152 | context 'when Rails router cannot recognize request' do |
111 | 153 | before do |
112 | 154 | allow(request).to receive(:env).and_return({'action_dispatch.routes' => route_set}) |
|
0 commit comments