require File.expand_path('../test_helper', File.dirname(__FILE__))
class CmsContentControllerTest < ActionController::TestCase
def test_render_page
get :render_html, :cms_path => ''
assert_equal cms_sites(:default), assigns(:cms_site)
assert_equal cms_layouts(:default), assigns(:cms_layout)
assert_equal cms_pages(:default), assigns(:cms_page)
assert_response :success
assert_equal rendered_content_formatter(
'
layout_content_a
default_page_text_content_a
default_snippet_content
default_page_text_content_b
layout_content_b
default_snippet_content
layout_content_c'
), response.body
end
def test_render_page_with_app_layout
cms_layouts(:default).update_attribute(:app_layout, 'cms_admin.html.erb')
get :render_html, :cms_path => ''
assert_response :success
assert assigns(:cms_page)
assert_select "body[class='c_cms_content a_render_html']"
end
def test_render_page_with_xhr
cms_layouts(:default).update_attribute(:app_layout, 'cms_admin.html.erb')
xhr :get, :render_html, :cms_path => ''
assert_response :success
assert assigns(:cms_page)
assert_no_select "body[class='c_cms_content a_render_html']"
end
def test_render_page_not_found
get :render_html, :cms_path => 'doesnotexist'
assert_response 404
assert_equal 'Page Not Found', response.body
end
def test_render_page_not_found_with_custom_404
page = cms_sites(:default).pages.create!(
:label => '404',
:slug => '404',
:parent_id => cms_pages(:default).id,
:layout_id => cms_layouts(:default).id,
:is_published => '1',
:blocks_attributes => [
{ :identifier => 'default_page_text',
:content => 'custom 404 page content' }
]
)
assert_equal '/404', page.full_path
assert page.is_published?
get :render_html, :cms_path => 'doesnotexist'
assert_response 404
assert assigns(:cms_page)
assert_match /custom 404 page content/, response.body
end
def test_render_page_with_no_site
Cms::Site.destroy_all
get :render_html, :cms_path => ''
assert_response 404
assert_equal 'Site Not Found', response.body
end
def test_render_page_with_no_layout
Cms::Layout.destroy_all
get :render_html, :cms_path => ''
assert_response 404
assert_equal 'Layout Not Found', response.body
end
def test_render_page_with_redirect
cms_pages(:child).update_attribute(:target_page, cms_pages(:default))
assert_equal cms_pages(:default), cms_pages(:child).target_page
get :render_html, :cms_path => 'child-page'
assert_response :redirect
assert_redirected_to '/'
end
def test_render_page_unpublished
page = cms_pages(:default)
page.update_attribute(:is_published, false)
get :render_html, :cms_path => ''
assert_response 404
end
def test_render_page_with_irb_disabled
assert_equal false, ComfortableMexicanSofa.config.allow_irb
irb_page = cms_sites(:default).pages.create!(
:label => 'irb',
:slug => 'irb',
:parent_id => cms_pages(:default).id,
:layout_id => cms_layouts(:default).id,
:is_published => '1',
:blocks_attributes => [
{ :identifier => 'default_page_text',
:content => 'text <%= 2 + 2 %> text' }
]
)
get :render_html, :cms_path => 'irb'
assert_response :success
assert_match "text <%= 2 + 2 %> text", response.body
end
def test_render_page_with_irb_enabled
ComfortableMexicanSofa.config.allow_irb = true
irb_page = cms_sites(:default).pages.create!(
:label => 'irb',
:slug => 'irb',
:parent_id => cms_pages(:default).id,
:layout_id => cms_layouts(:default).id,
:is_published => '1',
:blocks_attributes => [
{ :identifier => 'default_page_text',
:content => 'text <%= 2 + 2 %> text' }
]
)
get :render_html, :cms_path => 'irb'
assert_response :success
assert_match "text 4 text", response.body
end
def test_render_css
get :render_css, :site_id => cms_sites(:default).id, :identifier => cms_layouts(:default).identifier
assert_response :success
assert_match %r{text\/css}, response.headers["Content-Type"]
assert_equal cms_layouts(:default).css, response.body
end
def test_render_css_not_found
get :render_css, :site_id => cms_sites(:default).id, :identifier => 'bogus'
assert_response 404
end
def test_render_js
get :render_js, :site_id => cms_sites(:default).id, :identifier => cms_layouts(:default).identifier
assert_response :success
assert_match %r{text\/javascript}, response.headers["Content-Type"]
assert_equal cms_layouts(:default).js, response.body
end
def test_render_js_not_found
get :render_js, :site_id => cms_sites(:default).id, :identifier => 'bogus'
assert_response 404
end
def test_render_sitemap
get :render_sitemap, :format => :xml
assert_response :success
assert_match 'http://test.host/child-page', response.body
end
def test_render_sitemap_with_path
site = cms_sites(:default)
site.update_attribute(:path, 'en')
get :render_sitemap, :cms_path => site.path, :format => :xml
assert_response :success
assert_equal cms_sites(:default), assigns(:cms_site)
assert_match 'http://test.host/en/child-page', response.body
end
def test_render_sitemap_with_path_invalid_with_single_site
site = cms_sites(:default)
site.update_attribute(:path, 'en')
get :render_sitemap, :cms_path => 'fr', :format => :xml
assert_response :success
assert_equal cms_sites(:default), assigns(:cms_site)
assert_match 'http://test.host/en/child-page', response.body
end
class TestRenderException
def self.callback(cms_site, view, xml)
xml.url do
# make sure we have the view
xml.loc view.url_for("http://test.host/test_render")
xml.lastmod 2.days.ago.strftime('%Y-%m-%d')
end
end
end
def test_rendering_sitemap_with_extensions
ComfortableMexicanSofa::Sitemap.register_extension(TestRenderException.method(:callback))
get :render_sitemap, :format => :xml
assert_response :success
assert_match 'http://test.host/test_render', response.body
end
end