require 'test_helper'
module Cms
# This should be ported to features/content_pages.feature over time.
class ContentControllerTest < ActionController::TestCase
include Cms::ControllerTestHelper
def setup
given_there_is_a_guest_group
given_there_is_a_cmsadmin
given_there_is_a_sitemap
end
def test_show_another_page
@page = Factory(:page, :section => root_section, :path => "/about", :name => "Test About", :template_file_name => "default.html.erb", :publish_on_save => true)
get :show, :path => "about"
assert_select "title", "Test About"
end
def test_page_not_found_to_cms_admin
login_as_cms_admin
get :show, :path => "foo"
assert_response :not_found
assert_select "title", "Page Not Found"
assert_select "h2", "There is no page at /foo"
end
def test_show_protected_page_to_privileged_user
create_protected_page
login_as @privileged_user
get :show, :path => "secret"
assert_response :success
assert_select "title", "Shhh... It's a Secret"
end
def test_show_archived_page_to_user
create_archived_page
login_as_cms_admin
get :show, :path => "archived"
assert_response :success
assert_select "title", "Archived"
end
def test_show_page_route
@page_template = Factory(:page_template, :name => "test_show_page_route")
@page = Factory(:page,
:section => root_section,
:template_file_name => "test_show_page_route.html.erb")
@portlet = DynamicPortlet.create!(:name => "Test",
:template => "
<%= @foo %>
",
:connect_to_page_id => @page.id, :connect_to_container => "main")
@page_route = @page.page_routes.create(:pattern => "/foo", :code => "@foo = params[:foo]")
reset(:page)
@page.publish!
get :show_page_route, :foo => "42", :_page_route_id => @page_route.id
assert_response :success
assert_select "h1", "42"
end
def test_show_page_with_content
create_page_with_content
get :show, :path => "page_with_content"
assert_response :success
assert_select "h3", "TEST"
end
def test_show_draft_page_with_content_as_editor
login_as_cms_admin
create_page_with_content
@block.update_attributes(:content => "I've been edited
")
reset(:page, :block)
get :show, :path => "page_with_content"
assert_response :success
assert_select "h3", "I've been edited"
end
def test_is_file
assert_is_file(true, "/system/file.pdf")
assert_is_file(true, "/system/file.txt")
assert_is_file(true, "/system/file.html")
assert_is_file(false, "/system/file")
end
protected
def assert_is_file(truth, path)
@request = mock()
@controller.expects(:request).returns(@request)
@request.expects(:url).returns(path)
assert_equal truth, @controller.send(:is_file?)
end
def create_protected_user_section_group
@protected_section = Factory(:section, :parent => root_section)
@secret_group = Factory(:group, :name => "Secret")
@secret_group.sections << @protected_section
@privileged_user = Factory(:user, :login => "privileged")
@privileged_user.groups << @secret_group
end
def create_protected_page
create_protected_user_section_group
@page = Factory(:page,
:section => @protected_section,
:path => "/secret",
:name => "Shhh... It's a Secret",
:template_file_name => "default.html.erb",
:publish_on_save => true)
end
def create_file
@file = mock_file(:content_type => "text/plain")
@file_block = Factory(:file_block, :attachment_section => root_section, :attachment_file => @file, :attachment_file_path => "/test.txt", :publish_on_save => true)
end
def create_protected_file
create_protected_user_section_group
create_file
reset(:file_block)
@file_block.update_attributes(:attachment_section => @protected_section)
reset(:file_block)
end
def create_archived_page
@page = Factory(:page,
:section => root_section,
:path => "/archived",
:name => "Archived",
:archived => true,
:template_file_name => "default.html.erb",
:publish_on_save => true)
end
def create_page_with_content
@page_template = Factory(:page_template, :name => "testing_editting_content")
@page = Factory(:page,
:section => root_section,
:path => "/page_with_content",
:template_file_name => "testing_editting_content.html.erb")
@block = HtmlBlock.create!(:name => "Test",
:content => "TEST
",
:connect_to_page_id => @page.id,
:connect_to_container => "main")
reset(:page)
@page.publish!
end
end
# CMS Page Caching Enabled (Production Mode)
# Logged in as guest
# mysite.com/page -> serves cached page
# cms.mysite.com/page -> redirect to mysite.com/page
#
# Logged in as a registered user
# mysite.com/page -> serves cached page
# cms.mysite.com/page -> redirect to mysite.com/page
#
# Logged in as cms user
# mysite.com/page -> serves cached page
# cms.mysite.com/page -> renders cms page editor
class ContentCachingEnabledControllerTest < ActionController::TestCase
tests Cms::ContentController
include Cms::ControllerTestHelper
def setup
given_there_is_a_guest_group
given_there_is_a_cmsadmin
given_there_is_a_sitemap
ActionController::Base.perform_caching = true
@page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
@registered_user = Factory(:user)
@registered_user.groups << Group.guest
end
def teardown
ActionController::Base.perform_caching = false
end
def test_guest_user_views_page_on_public_site
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_guest_user_views_page_on_cms_site
@request.host = "cms.mysite.com"
# Actually simulates http://cms.mysite.com/?path=page , but we can't test domains in functional specs
get :show, :path => "page", :use_route => false
# Really should go to "http://mysite.com/page" instead.
assert_redirected_to "http://mysite.com/?path=page"
end
def test_registered_user_views_page_on_public_site
login_as @registered_user
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_registered_user_views_page_on_cms_site
login_as @registered_user
@request.host = "cms.mysite.com"
# Simulates http://cms.mysite.com/?path=page rather than http://cms.mysite.com/page
get :show, :path => "page", :use_route => false
assert_redirected_to "http://mysite.com/?path=page"
end
def test_cms_user_views_page_on_public_site
login_as_cms_admin
@request.session[:page_mode] = "edit"
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
assert_select "iframe", {:count => 0}
end
def test_cms_user_views_page_on_cms_site_with_caching
login_as_cms_admin
@request.session[:page_mode] = "edit"
@request.host = "cms.mysite.com"
get :show, :path => "page", :use_route => false
assert_response :success
assert_select "title", "Test Page"
assert_select "iframe"
end
end
# CMS Page Caching Disabled (Development Mode)
# Logged in as guest
# mysite.com/page -> renders page
# cms.mysite.com/page -> renders page
#
# Logged in as a registered user
# mysite.com/page -> renders page
# cms.mysite.com/page -> renders page
#
# Logged in as cms user
# mysite.com/page -> renders cms page editor
# cms.mysite.com/page -> renders cms page editor
class ContentCachingDisabledControllerTest < ActionController::TestCase
tests Cms::ContentController
include Cms::ControllerTestHelper
def setup
given_there_is_a_guest_group
given_there_is_a_cmsadmin
given_there_is_a_sitemap
ActionController::Base.perform_caching = false
@page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
@registered_user = Factory(:user)
@registered_user.groups << Group.guest
end
def test_guest_user_views_page_on_public_site
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_guest_user_views_page_on_cms_site
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_registered_user_views_page_on_public_site
login_as @registered_user
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_registered_user_views_page_on_cms_site
login_as @registered_user
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
end
def test_cms_user_views_page_on_public_site
login_as_cms_admin
@request.session[:page_mode] = "edit"
@request.host = "mysite.com"
get :show, :path => "page"
assert_response :success
assert_select "title", "Test Page"
assert_select "iframe"
end
def test_cms_user_views_page_on_cms_site
login_as_cms_admin
@request.session[:page_mode] = "edit"
@request.host = "cms.mysite.com"
get :show, :path => "page", :use_route => false
assert_response :success
assert_select "title", "Test Page"
assert_select "iframe"
end
test "When portlets throw a generic error, the page should still render the other content." do
@page = Factory(:page, :section => root_section, :path => "/about", :name => "Test About", :template_file_name => "default.html.erb", :publish_on_save => true)
@portlet_render = DynamicPortlet.create!(:name => "Test", :connect_to_page_id => @page.id, :connect_to_container => "main", :template => 'hello
')
@portlet_raise_generic = DynamicPortlet.create!(:name => "Test", :connect_to_page_id => @page.id, :connect_to_container => "main", :code => 'raise')
reset(:page)
get :show, :path => "about"
assert_select "#hi", "hello"
end
end
end