Added continue functionality to pages.

DeLynn Berry committed Apr 02, 2011
commit b1b6c596ca31d2767993316d2944d2bed3cd9188
Showing 3 changed files with 97 additions and 56 deletions
app/controllers/cms_admin/pages_controller.rb +17 -17
@@ @@ -1,53 +1,53 @@
class CmsAdmin::PagesController < CmsAdmin::BaseController
-
+
before_filter :check_for_layouts, :only => [:new, :edit]
before_filter :build_cms_page, :only => [:new, :create]
before_filter :load_cms_page, :only => [:edit, :update, :destroy]
before_filter :preview_cms_page, :only => [:create, :update]
before_filter :build_upload_file, :only => [:new, :edit]
-
+
def index
return redirect_to :action => :new if @cms_site.cms_pages.count == 0
@cms_pages = [@cms_site.cms_pages.root].compact
end
-
+
def new
render
end
-
+
def edit
render
end
-
+
def create
@cms_page.save!
flash[:notice] = 'Page saved'
- redirect_to :action => :edit, :id => @cms_page
+ redirect_to (params[:commit] ? {:action => :index} : {:action => :edit, :id => @cms_page})
rescue ActiveRecord::RecordInvalid
flash.now[:error] = 'Failed to create page'
render :action => :new
end
-
+
def update
@cms_page.save!
flash[:notice] = 'Page updated'
- redirect_to :action => :edit, :id => @cms_page
+ redirect_to (params[:commit] ? {:action => :index} : {:action => :edit, :id => @cms_page})
rescue ActiveRecord::RecordInvalid
flash.now[:error] = 'Failed to update page'
render :action => :edit
end
-
+
def destroy
@cms_page.destroy
flash[:notice] = 'Page deleted'
redirect_to :action => :index
end
-
+
def form_blocks
@cms_page = @cms_site.cms_pages.find_by_id(params[:id]) || CmsPage.new
@cms_page.cms_layout = @cms_site.cms_layouts.find_by_id(params[:layout_id])
end
-
+
def toggle_branch
@cms_page = @cms_site.cms_pages.find(params[:id])
s = (session[:cms_page_tree] ||= [])
@@ @@ -56,7 +56,7 @@ class CmsAdmin::PagesController < CmsAdmin::BaseController
rescue ActiveRecord::RecordNotFound
# do nothing
end
-
+
def reorder
(params[:cms_page] || []).each_with_index do |id, index|
if (cms_page = CmsPage.find_by_id(id))
@@ @@ -65,7 +65,7 @@ class CmsAdmin::PagesController < CmsAdmin::BaseController
end
render :nothing => true
end
-
+
protected
def check_for_layouts
@@ @@ -74,17 +74,17 @@ protected
redirect_to new_cms_admin_layout_path
end
end
-
+
def build_cms_page
@cms_page = @cms_site.cms_pages.new(params[:cms_page])
@cms_page.parent ||= (CmsPage.find_by_id(params[:parent_id]) || @cms_site.cms_pages.root)
@cms_page.cms_layout ||= (@cms_page.parent && @cms_page.parent.cms_layout || @cms_site.cms_layouts.first)
end
-
+
def build_upload_file
@upload = CmsUpload.new
end
-
+
def load_cms_page
@cms_page = @cms_site.cms_pages.find(params[:id])
@cms_page.attributes = params[:cms_page]
@@ @@ -93,7 +93,7 @@ protected
flash[:error] = 'Page not found'
redirect_to :action => :index
end
-
+
def preview_cms_page
if params[:preview]
layout = @cms_page.cms_layout.app_layout.blank?? false : @cms_page.cms_layout.app_layout
app/views/cms_admin/pages/_form.html.erb +4 -1
@@ @@ -32,6 +32,9 @@
<%= form.simple_field nil, nil, :class => 'submit_element' do %>
<%= form.check_box :is_published, :disable_builder => true %>
<%= form.label_for :is_published, :label => 'Published' %>
- <%= form.submit @cms_page.new_record?? 'Create Page' : 'Update Page', :disable_builder => true %>
<%= form.submit 'Preview', :name => 'preview', :id => 'cms_page_preview', :disable_builder => true %>
+ <% end %>
+ <%= form.simple_field nil, nil, :class => 'submit_element' do %>
+ <%= form.submit @cms_page.new_record? ? 'Create Page' : 'Update Page', :disable_builder => true %>
+ <%= form.submit @cms_page.new_record? ? 'Create &amp; Edit'.html_safe : 'Update &amp; Edit'.html_safe, :name => "save", :disable_builder => true %>
<% end %>
\ No newline at end of file
test/functional/cms_admin/pages_controller_test.rb +76 -38
@@ @@ -1,94 +1,94 @@
require File.expand_path('../../test_helper', File.dirname(__FILE__))
class CmsAdmin::PagesControllerTest < ActionController::TestCase
-
+
def test_get_index
get :index
assert_response :success
assert assigns(:cms_pages)
assert_template :index
end
-
+
def test_get_index_with_no_pages
CmsPage.delete_all
get :index
assert_response :redirect
assert_redirected_to :action => :new
end
-
+
def test_get_new
get :new
assert_response :success
assert assigns(:cms_page)
assert_equal cms_layouts(:default), assigns(:cms_page).cms_layout
-
+
assert_template :new
assert_select 'form[action=/cms-admin/pages]'
end
-
+
def test_get_new_with_field_datetime
cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:datetime}}')
get :new
assert_select "input[type='datetime'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_field_integer
cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:integer}}')
get :new
assert_select "input[type='number'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_field_string
cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label}}')
get :new
assert_select "input[type='text'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_field_text
cms_layouts(:default).update_attribute(:content, '{{cms:field:test_label:text}}')
get :new
assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_page_datetime
cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:datetime}}')
get :new
assert_select "input[type='datetime'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_page_integer
cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:integer}}')
get :new
assert_select "input[type='number'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_page_string
cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:string}}')
get :new
assert_select "input[type='text'][name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_page_text
cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label}}')
get :new
assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_with_rich_page_text
cms_layouts(:default).update_attribute(:content, '{{cms:page:test_label:rich_text}}')
get :new
assert_select "textarea[name='cms_page[cms_blocks_attributes][][content]']"
assert_select "input[type='hidden'][name='cms_page[cms_blocks_attributes][][label]'][value='test_label']"
end
-
+
def test_get_new_as_child_page
get :new, :parent_id => cms_pages(:default)
assert_response :success
@@ @@ -96,7 +96,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_equal cms_pages(:default), assigns(:cms_page).parent
assert_template :new
end
-
+
def test_get_edit
page = cms_pages(:default)
get :edit, :id => page
@@ @@ -107,14 +107,14 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_select "input[name='cms_page[cms_blocks_attributes][][id]'][value='#{cms_blocks(:default_field_text).id}']"
assert_select "input[name='cms_page[cms_blocks_attributes][][id]'][value='#{cms_blocks(:default_field_text).id}']"
end
-
+
def test_get_edit_failure
get :edit, :id => 'not_found'
assert_response :redirect
assert_redirected_to :action => :index
assert_equal 'Page not found', flash[:error]
end
-
+
def test_get_edit_with_blank_layout
page = cms_pages(:default)
page.update_attribute(:cms_layout_id, nil)
@@ @@ -123,8 +123,32 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert assigns(:cms_page)
assert assigns(:cms_page).cms_layout
end
-
- def test_creation
+
+ def test_creation_with_commit
+ assert_difference 'CmsPage.count' do
+ assert_difference 'CmsBlock.count', 2 do
+ post :create, :cms_page => {
+ :label => 'Test Page',
+ :slug => 'test-page',
+ :parent_id => cms_pages(:default).id,
+ :cms_layout_id => cms_layouts(:default).id,
+ :cms_blocks_attributes => [
+ { :label => 'default_page_text',
+ :content => 'content content' },
+ { :label => 'default_field_text',
+ :content => 'title content' }
+ ]
+ }, :commit => 'Create Page'
+ assert_response :redirect
+ page = CmsPage.last
+ assert_equal cms_sites(:default), page.cms_site
+ assert_redirected_to :action => :index
+ assert_equal 'Page saved', flash[:notice]
+ end
+ end
+ end
+
+ def test_creation_without_commit
assert_difference 'CmsPage.count' do
assert_difference 'CmsBlock.count', 2 do
post :create, :cms_page => {
@@ @@ -147,7 +171,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
end
end
end
-
+
def test_creation_failure
assert_no_difference ['CmsPage.count', 'CmsBlock.count'] do
post :create, :cms_page => {
@@ @@ -167,8 +191,22 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_equal 'Failed to create page', flash[:error]
end
end
-
- def test_update
+
+ def test_update_with_commit
+ page = cms_pages(:default)
+ assert_no_difference 'CmsBlock.count' do
+ put :update, :id => page, :cms_page => {
+ :label => 'Updated Label'
+ }, :commit => 'Update Page'
+ page.reload
+ assert_response :redirect
+ assert_redirected_to :action => :index
+ assert_equal 'Page updated', flash[:notice]
+ assert_equal 'Updated Label', page.label
+ end
+ end
+
+ def test_update_without_commit
page = cms_pages(:default)
assert_no_difference 'CmsBlock.count' do
put :update, :id => page, :cms_page => {
@@ @@ -181,7 +219,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_equal 'Updated Label', page.label
end
end
-
+
def test_update_with_layout_change
page = cms_pages(:default)
assert_difference 'CmsBlock.count', 1 do
@@ @@ -204,7 +242,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_equal ['new_page_text_content', 'default_field_text_content', 'new_page_string_content'], page.cms_blocks.collect{|b| b.content}
end
end
-
+
def test_update_failure
put :update, :id => cms_pages(:default), :cms_page => {
:label => ''
@@ @@ -214,7 +252,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert assigns(:cms_page)
assert_equal 'Failed to update page', flash[:error]
end
-
+
def test_destroy
assert_difference 'CmsPage.count', -2 do
assert_difference 'CmsBlock.count', -2 do
@@ @@ -225,21 +263,21 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
end
end
end
-
+
def test_get_form_blocks
xhr :get, :form_blocks, :id => cms_pages(:default), :layout_id => cms_layouts(:nested).id
assert_response :success
assert assigns(:cms_page)
assert_equal 2, assigns(:cms_page).cms_tags.size
assert_template :form_blocks
-
+
xhr :get, :form_blocks, :id => cms_pages(:default), :layout_id => cms_layouts(:default).id
assert_response :success
assert assigns(:cms_page)
assert_equal 4, assigns(:cms_page).cms_tags.size
assert_template :form_blocks
end
-
+
def test_get_form_blocks_for_new_page
xhr :get, :form_blocks, :id => 0, :layout_id => cms_layouts(:default).id
assert_response :success
@@ @@ -247,7 +285,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_equal 3, assigns(:cms_page).cms_tags.size
assert_template :form_blocks
end
-
+
def test_creation_preview
assert_no_difference 'CmsPage.count' do
post :create, :preview => 'Preview', :cms_page => {
@@ @@ -264,7 +302,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_match /preview content/, response.body
end
end
-
+
def test_update_preview
page = cms_pages(:default)
assert_no_difference 'CmsPage.count' do
@@ @@ -282,7 +320,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_not_equal 'Updated Label', page.label
end
end
-
+
def test_get_new_with_no_layout
CmsLayout.destroy_all
get :new
@@ @@ -290,7 +328,7 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_redirected_to new_cms_admin_layout_path
assert_equal 'No Layouts found. Please create one.', flash[:error]
end
-
+
def test_get_edit_with_no_layout
CmsLayout.destroy_all
page = cms_pages(:default)
@@ @@ -299,18 +337,18 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
assert_redirected_to new_cms_admin_layout_path
assert_equal 'No Layouts found. Please create one.', flash[:error]
end
-
+
def test_get_toggle_branch
page = cms_pages(:default)
get :toggle_branch, :id => page, :format => :js
assert_response :success
assert_equal [page.id.to_s], session[:cms_page_tree]
-
+
get :toggle_branch, :id => page, :format => :js
assert_response :success
assert_equal [], session[:cms_page_tree]
end
-
+
def test_reorder
page_one = cms_pages(:child)
page_two = cms_sites(:default).cms_pages.create!(
@@ @@ -321,14 +359,14 @@ class CmsAdmin::PagesControllerTest < ActionController::TestCase
)
assert_equal 0, page_one.position
assert_equal 1, page_two.position
-
+
post :reorder, :cms_page => [page_two.id, page_one.id]
assert_response :success
page_one.reload
page_two.reload
-
+
assert_equal 1, page_one.position
assert_equal 0, page_two.position
end
-
+
end
\ No newline at end of file