require File.dirname(__FILE__) + '/spec_helper.rb' describe 'RoutingFilter', 'url generation' do include RoutingFilterHelpers before :each do setup_environment :locale, :pagination @site = Site.new @section = Section.new @article = Article.new end describe "named route url_helpers" do describe "a not nested resource" do it 'does not change the section_path when given page option equals 1' do section_path(:id => 1, :page => 1).should == '/en/sections/1' end it 'appends the pages segments to section_path when given page option does not equal 1' do section_path(:id => 1, :page => 2).should == '/en/sections/1/pages/2' end it 'prepends the current locale to section_path' do I18n.locale = :de section_path(:id => 1).should == '/de/sections/1' end it 'prepends a given locale param to section_path' do I18n.locale = :de section_path(:id => 1, :locale => :fi).should == '/fi/sections/1' end it 'does not prepend a locale to section_path if given locale is false' do section_path(:id => 1, :locale => false).should == '/sections/1' end it 'works on section_path with both a locale and page option' do section_path(:id => 1, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2' end it 'should not prepend an invalid locale to section_path' do section_path(:id => 1, :locale => :aa).should == '/sections/1' end it 'should prepend a longer locale to section_path' do section_path(:id => 1, :locale => 'en-US').should == '/en-US/sections/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_path(:id => 1, :locale => :en).should == '/sections/1' end end describe "a nested resource" do it 'does not change the section_article_path when given page option equals 1' do section_article_path(:section_id => 1, :id => 1, :page => 1).should == '/en/sections/1/articles/1' end it 'appends the pages segments to section_article_path when given page option does not equal 1' do section_article_path(:section_id => 1, :id => 1, :page => 2).should == '/en/sections/1/articles/1/pages/2' end it 'prepends the current locale to section_article_path' do I18n.locale = :de section_article_path(:section_id => 1, :id => 1).should == '/de/sections/1/articles/1' end it 'prepends a given locale param to section_article_path' do I18n.locale = :de section_article_path(:section_id => 1, :id => 1, :locale => :fi).should == '/fi/sections/1/articles/1' end it 'does not prepend a locale to section_article_path if given locale is false' do section_article_path(:section_id => 1, :id => 1, :locale => false).should == '/sections/1/articles/1' end it 'works on section_article_path with both a locale and page option' do section_article_path(:section_id => 1, :id => 1, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2' end it 'should not prepend an invalid locale to section_article_path' do section_article_path(:section_id => 1, :id => 1, :locale => :aa).should == '/sections/1/articles/1' end it 'should prepend a longer locale to section_article_path' do section_article_path(:section_id => 1, :id => 1, :locale => 'en-US').should == '/en-US/sections/1/articles/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_article_path(:section_id => 1, :id => 1, :locale => :en).should == '/sections/1/articles/1' end end end describe 'when used with named route url_helper with "optimized" generation blocks' do describe "a not nested resource" do it 'does not change the section_path when given page option equals 1' do section_path(1, :page => 1).should == '/en/sections/1' end it 'appends the pages segments to section_path when given page option does not equal 1' do section_path(1, :page => 2).should == '/en/sections/1/pages/2' end it 'prepends the current locale to section_path' do I18n.locale = :de section_path(1).should == '/de/sections/1' end it 'prepends a given locale param to section_path' do I18n.locale = :de section_path(1, :locale => :fi).should == '/fi/sections/1' end it 'does not prepend a locale to section_path if given locale is false' do section_path(1, :locale => false).should == '/sections/1' end it 'works for section_path with both a locale and page option' do section_path(1, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2' end it 'should not prepend an invalid locale to section_path' do section_path(1, :locale => :aa).should == '/sections/1' end it 'should prepend a longer locale to section_path' do section_path(1, :locale => 'en-US').should == '/en-US/sections/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_path(1, :locale => :en).should == '/sections/1' end end describe "a nested resource" do it 'does not change the section_article_path when given page option equals 1' do section_article_path(1, 1, :page => 1).should == '/en/sections/1/articles/1' end it 'appends the pages segments to section_article_path when given page option does not equal 1' do section_article_path(1, 1, :page => 2).should == '/en/sections/1/articles/1/pages/2' end it 'prepends the current locale to section_article_path' do I18n.locale = :de section_article_path(1, 1).should == '/de/sections/1/articles/1' end it 'prepends a given locale param to section_article_path' do I18n.locale = :de section_article_path(1, 1, :locale => :fi).should == '/fi/sections/1/articles/1' end it 'does not prepend a locale to section_article_path if given locale is false' do section_article_path(1, 1, :locale => false).should == '/sections/1/articles/1' end it 'works for section_article_path with both a locale and page option' do section_article_path(1, 1, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2' end it 'should not prepend an invalid locale to section_article_path' do section_article_path(1, 1, :locale => :aa).should == '/sections/1/articles/1' end it 'should prepend a longer locale to section_article_path' do section_article_path(1, 1, :locale => 'en-US').should == '/en-US/sections/1/articles/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_article_path(1, 1, :locale => :en).should == '/sections/1/articles/1' end end end describe 'when used with a polymorphic_path' do describe "a not nested resource" do it 'does not change the section_path when given page option equals 1' do section_path(@section, :page => 1).should == '/en/sections/1' end it 'appends the pages segments to section_path when given page option does not equal 1' do section_path(@section, :page => 2).should == '/en/sections/1/pages/2' end it 'prepends the current locale to section_path' do I18n.locale = :de section_path(@section).should == '/de/sections/1' end it 'prepends a given locale param to section_path' do I18n.locale = :de section_path(@section, :locale => :fi).should == '/fi/sections/1' end it 'does not prepend a locale to section_path if given locale is false' do section_path(@section, :locale => false).should == '/sections/1' end it 'works for section_path with both a locale and page option' do section_path(@section, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2' end it 'should not prepend an invalid locale to section_path' do section_path(@section, :locale => :aa).should == '/sections/1' end it 'should prepend a longer locale to section_path' do section_path(@section, :locale => 'en-US').should == '/en-US/sections/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_path(@section, :locale => :en).should == '/sections/1' end end describe "a nested resource" do it 'does not change the section_article_path when given page option equals 1' do section_article_path(@section, @article, :page => 1).should == '/en/sections/1/articles/1' end it 'appends the pages segments to section_article_path when given page option does not equal 1' do section_article_path(@section, @article, :page => 2).should == '/en/sections/1/articles/1/pages/2' end it 'prepends the current locale to section_article_path' do I18n.locale = :de section_article_path(@section, @article).should == '/de/sections/1/articles/1' end it 'prepends a given locale param to section_article_path' do I18n.locale = :de section_article_path(@section, @article, :locale => :fi).should == '/fi/sections/1/articles/1' end it 'does not prepend a locale to section_article_path if given locale is false' do section_article_path(@section, @article, :locale => false).should == '/sections/1/articles/1' end it 'works for section_article_path with both a locale and page option' do section_article_path(@section, @article, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2' end it 'should not prepend an invalid locale to section_article_path' do section_article_path(@section, @article, :locale => :aa).should == '/sections/1/articles/1' end it 'should prepend a longer locale to section_article_path' do section_article_path(@section, @article, :locale => 'en-US').should == '/en-US/sections/1/articles/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false section_article_path(@section, @article, :locale => :en).should == '/sections/1/articles/1' end end end describe 'when used with url_for and an ActivRecord instance' do describe "a not nested resource" do it 'does not change the url_for result when given page option equals 1' do params = @section_params.update :id => @section, :page => 1 url_for(params).should == 'http://test.host/en/sections/1' end it 'appends the pages segments to url_for result when given page option does not equal 1' do params = @section_params.update :id => @section, :page => 2 url_for(params).should == 'http://test.host/en/sections/1/pages/2' end it 'prepends the current locale to url_for result' do I18n.locale = :de params = @section_params.update :id => @section url_for(params).should == 'http://test.host/de/sections/1' end it 'prepends a given locale param url_for result' do I18n.locale = :de params = @section_params.update :id => @section, :locale => :fi url_for(params).should == 'http://test.host/fi/sections/1' end it 'does not prepend a locale to url_for result if given locale is false' do params = @section_params.update :id => @section, :locale => false url_for(params).should == 'http://test.host/sections/1' end it 'works for url_for result with both a locale and page option' do params = @section_params.update :id => @section, :locale => :fi, :page => 2 url_for(params).should == 'http://test.host/fi/sections/1/pages/2' end it 'should not prepend an invalid locale to section_path' do params = @section_params.update :id => @section, :locale => :aa url_for(params).should == 'http://test.host/sections/1' end it 'should prepend a longer locale to section_path' do params = @section_params.update :id => @section, :locale => 'en-US' url_for(params).should == 'http://test.host/en-US/sections/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false params = @section_params.update :id => @section, :locale => :en url_for(params).should == 'http://test.host/sections/1' end end describe "a nested resource" do it 'does not change the url_for result when given page option equals 1' do params = @article_params.update :section_id => @section, :id => @article, :page => 1 url_for(params).should == 'http://test.host/en/sections/1/articles/1' end it 'appends the pages segments to url_for result when given page option does not equal 1' do params = @article_params.update :section_id => @section, :id => @article, :page => 2 url_for(params).should == 'http://test.host/en/sections/1/articles/1/pages/2' end it 'prepends the current locale to url_for result' do I18n.locale = :de params = @article_params.update :section_id => @section, :id => @article url_for(params).should == 'http://test.host/de/sections/1/articles/1' end it 'prepends a given locale param to url_for result' do I18n.locale = :de params = @article_params.update :section_id => @section, :id => @article, :locale => :fi url_for(params).should == 'http://test.host/fi/sections/1/articles/1' end it 'does not prepend a locale to url_for result if given locale is false' do params = @article_params.update :section_id => @section, :id => @article, :locale => false url_for(params).should == 'http://test.host/sections/1/articles/1' end it 'works for url_for result with both a locale and page option' do params = @article_params.update :section_id => @section, :id => @article, :locale => :fi, :page => 2 url_for(params).should == 'http://test.host/fi/sections/1/articles/1/pages/2' end it 'should not prepend an invalid locale to url_for result' do params = @article_params.update :section_id => @section, :id => @article, :locale => :aa url_for(params).should == 'http://test.host/sections/1/articles/1' end it 'should prepend a longer locale to section_article_path' do params = @article_params.update :section_id => @section, :id => @article, :locale => 'en-US' url_for(params).should == 'http://test.host/en-US/sections/1/articles/1' end it 'should not prepend the default locale when configured not to' do RoutingFilter::Locale.include_default_locale = false params = @article_params.update :section_id => @section, :id => @article, :locale => :en url_for(params).should == 'http://test.host/sections/1/articles/1' end end end end