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 & Edit'.html_safe : 'Update & 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 | |