aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/application/route_inspect_test.rb
blob: 78980705ed82147c5429ac0897714b28565c36f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
require 'test/unit'
require 'rails/application/route_inspector'
require 'action_controller'

module ApplicationTests
  class RouteInspectTest < Test::Unit::TestCase
    def setup
      @set = ActionDispatch::Routing::RouteSet.new
      @inspector = Rails::Application::RouteInspector.new
    end

    def test_cart_inspect
      @set.draw do
        get '/cart', :to => 'cart#show'
      end
      output = @inspector.format @set.routes
      assert_equal ["cart GET /cart(.:format) cart#show"], output
    end

    def test_inspect_shows_custom_assets
      @set.draw do
        get '/custom/assets', :to => 'custom_assets#show'
      end
      output = @inspector.format @set.routes
      assert_equal ["custom_assets GET /custom/assets(.:format) custom_assets#show"], output
    end

    def test_inspect_routes_shows_resources_route
      @set.draw do
        resources :articles
      end
      output = @inspector.format @set.routes
      expected = [
        "    articles GET    /articles(.:format)          articles#index",
        "             POST   /articles(.:format)          articles#create",
        " new_article GET    /articles/new(.:format)      articles#new",
        "edit_article GET    /articles/:id/edit(.:format) articles#edit",
        "     article GET    /articles/:id(.:format)      articles#show",
        "             PUT    /articles/:id(.:format)      articles#update",
        "             DELETE /articles/:id(.:format)      articles#destroy" ]
      assert_equal expected, output
    end

    def test_inspect_routes_shows_root_route
      @set.draw do
        root :to => 'pages#main'
      end
      output = @inspector.format @set.routes
      assert_equal ["root  / pages#main"], output
    end

    def test_inspect_routes_shows_dynamic_action_route
      @set.draw do
        match 'api/:action' => 'api'
      end
      output = @inspector.format @set.routes
      assert_equal ["  /api/:action(.:format) api#:action"], output
    end

    def test_inspect_routes_shows_controller_and_action_only_route
      @set.draw do
        match ':controller/:action'
      end
      output = @inspector.format @set.routes
      assert_equal ["  /:controller/:action(.:format) :controller#:action"], output
    end

    def test_inspect_routes_shows_controller_and_action_route_with_constraints
      @set.draw do
        match ':controller(/:action(/:id))', :id => /\d+/
      end
      output = @inspector.format @set.routes
      assert_equal ["  /:controller(/:action(/:id))(.:format) :controller#:action {:id=>/\\d+/}"], output
    end

    def test_rake_routes_shows_route_with_defaults
      @set.draw do
        match 'photos/:id' => 'photos#show', :defaults => {:format => 'jpg'}
      end
      output = @inspector.format @set.routes
      assert_equal [%Q[  /photos/:id(.:format) photos#show {:format=>"jpg"}]], output
    end

    def test_rake_routes_shows_route_with_constraints
      @set.draw do
        match 'photos/:id' => 'photos#show', :id => /[A-Z]\d{5}/
      end
      output = @inspector.format @set.routes
      assert_equal ["  /photos/:id(.:format) photos#show {:id=>/[A-Z]\\d{5}/}"], output
    end

    class RackApp
      def self.call(env)
      end
    end

    def test_rake_routes_shows_route_with_rack_app
      @set.draw do
        match 'foo/:id' => RackApp, :id => /[A-Z]\d{5}/
      end
      output = @inspector.format @set.routes
      assert_equal ["  /foo/:id(.:format) #{RackApp.name} {:id=>/[A-Z]\\d{5}/}"], output
    end
  end
end