Clone
sites_test.rb
require File.expand_path('../test_helper', File.dirname(__FILE__))

class SitesTest < ActionDispatch::IntegrationTest
  
  def test_get_admin_with_single_site
    http_auth :get, cms_admin_path
    assert assigns(:site)
    assert_equal cms_sites(:default), assigns(:site)
    assert_response :redirect
    assert_redirected_to cms_admin_site_pages_path(assigns(:site))
  end
  
  def test_get_admin_with_no_site
    Cms::Site.delete_all
    http_auth :get, cms_admin_path
    assert_response :redirect
    assert_redirected_to new_cms_admin_site_path
    assert_equal 'Site not found', flash[:error]
  end
  
  def test_get_public_page_with_single_site
    host! 'bogus.host'
    get '/'
    assert_response :success
    assert assigns(:cms_site)
    assert_equal 'test.host', assigns(:cms_site).hostname
  end
  
  def test_get_public_page_with_sites_with_different_paths
    Cms::Site.delete_all
    site_a = Cms::Site.create!(:identifier => 'site-a', :hostname => 'test.host', :path => '')
    site_b = Cms::Site.create!(:identifier => 'site-b', :hostname => 'test.host', :path => 'path-b')
    site_c = Cms::Site.create!(:identifier => 'site-c', :hostname => 'test.host', :path => 'path-c/child')
    
    %w(/ /path-a /path-a/child /path-c).each do |path|
      get path
      assert_response 404
      assert assigns(:cms_site), path
      assert_equal site_a, assigns(:cms_site)
      assert_equal path.gsub(/^\//, ''), @controller.params[:cms_path].to_s
    end
    
    %w(/path-b /path-b/child).each do |path|
      get path
      assert_response 404
      assert assigns(:cms_site), path
      assert_equal site_b, assigns(:cms_site)
      assert_equal path.gsub(/^\/path-b/, '').gsub(/^\//, ''), @controller.params[:cms_path].to_s
    end
    
    %w(/path-c/child /path-c/child/child).each do |path|
      get path
      assert_response 404
      assert assigns(:cms_site), path
      assert_equal site_c, assigns(:cms_site)
      assert_equal path.gsub(/^\/path-c\/child/, '').gsub(/^\//, ''), @controller.params[:cms_path].to_s
    end
  end
  
  def test_get_public_with_locale
    get '/'
    assert_response :success
    assert assigns(:cms_site)
    assert_equal :en, I18n.locale
    
    cms_sites(:default).update_attribute(:locale, 'fr')
    get '/'
    assert_response :success
    assert assigns(:cms_site)
    assert_equal :fr, I18n.locale
  end
  
  def test_get_admin_with_locale
    http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
    assert_response :success
    assert_equal :en, I18n.locale
    
    cms_sites(:default).update_attribute(:locale, 'fr')
    http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
    assert_response :success
    assert_equal :fr, I18n.locale
  end
  
  def test_get_admin_with_forced_locale
    ComfortableMexicanSofa.config.admin_locale = :en
    cms_sites(:default).update_attribute(:locale, 'fr')
    http_auth :get, cms_admin_site_pages_path(cms_sites(:default))
    assert_response :success
    assert_equal :en, I18n.locale
  end
  
end