assert_routing vs file extensions

Railsers:

Our versions are Rails 1.2.3 on ruby 1.8.6 (2007-09-23 patchlevel 110).

routes.rb contains this:

   map.connect '/song/:filename*extension', :controller => 'frogs',
                                            :action => 'index'

and our test contains this:

   frog_id = frog(:african_bull).id
   assert_routing "/song/#{frog_id}.mp3", :controller => 'frogs',
                                          :action => 'index',
                                          :filename => "#{frog_id}",
                                          :extension => ['mp3']

That looks perfectly correct, right? Here's the error message:

The recognized options <{"extension"=>[".mp3"],
  "action"=>"index",
  "controller"=>"frogs",
  "filename"=>"1"}> did not match <{"extension"=>["mp3"],
  "action"=>"index",
  "controller"=>"frogs",
  "filename"=>"1"}>, difference: <{"extension"=>["mp3"]}>

Ooookay. It says the "difference" is the part that's exactly the same - "extension"=>["mp3"]!

How to fix?

Hi --

Railsers:

Our versions are Rails 1.2.3 on ruby 1.8.6 (2007-09-23 patchlevel 110).

routes.rb contains this:

  map.connect '/song/:filename*extension', :controller => 'frogs',
                                           :action => 'index'

and our test contains this:

  frog_id = frog(:african_bull).id
  assert_routing "/song/#{frog_id}.mp3", :controller => 'frogs',
                                         :action => 'index',
                                         :filename => "#{frog_id}",
                                         :extension => ['mp3']

That looks perfectly correct, right? Here's the error message:

The recognized options <{"extension"=>[".mp3"],
"action"=>"index",
"controller"=>"frogs",
"filename"=>"1"}> did not match <{"extension"=>["mp3"],
"action"=>"index",
"controller"=>"frogs",
"filename"=>"1"}>, difference: <{"extension"=>["mp3"]}>

Ooookay. It says the "difference" is the part that's exactly the same -
"extension"=>["mp3"]!

Yeah, I've always loved that one :slight_smile:

How to fix?

*extension is mopping up the dot, because filename matches everything
up to but not including a dot, and *extension gets everything else
(and it all gets put into one string, because the dot doesn't separate
elements inside the glob).

So you need either :filename.*extension in the route string, or
['.mp3'] in the test.

David