Changeset 1253

Show
Ignore:
Timestamp:
2008-11-14 11:30:28 (2 months ago)
Author:
gaspard
Message:

commit 097ed9825e7e74a7a9d23b4aad162e909460123b
Author: Gaspard Bucher <gaspard@teti.ch>

Added a "valid_template?" hook to replace vital templates by defaults when they block the zena due to zafu errors (impossible to login, etc). Enabled session controller testing back.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/app/controllers/application.rb

    r1252 r1253  
    220220        cache_page(:content_data => (failure || data), :content_path => filepath) if opts[:cache] 
    221221      else 
     222        # html 
    222223        render :file => template_url(opts), :layout=>false, :status => opts[:status] 
    223224        cache_page(:url => opts[:cache_url]) if opts[:cache] 
     
    315316        skin_helper = response.template 
    316317        res = ZafuParser.new_with_url(skin_path, :helper => skin_helper).render 
     318         
     319        unless valid_template?(res, opts) 
     320          # problem during rendering, use default zafu 
     321          res = ZafuParser.new(default_zafu_template(opts[:mode]), :helper => skin_helper).render 
     322        end 
    317323         
    318324        if session[:dev] && mode != '+popupLayout' 
     
    884890      table 
    885891    end 
     892     
     893    # Make sure some vital templates never get broken 
     894    def valid_template?(content, opts) 
     895      mode = opts[:mode] 
     896      case mode 
     897      when '+login' 
     898        content =~ %r{<form[^>]* action\s*=\s*./session} 
     899      else 
     900        true 
     901      end 
     902    end 
     903     
     904    # Default template content for a specified mode 
     905    def default_zafu_template(mode) 
     906      if mode =~ /\A\.|[^\w\+\._\-\/]/ 
     907        raise Zena::AccessViolation.new("'mode' contains illegal characters : #{mode.inspect}") 
     908      end 
     909      File.read(File.join(RAILS_ROOT, 'app', 'views', 'templates', 'defaults', "#{mode}.zafu")) 
     910    end 
     911 
    886912end 
    887913 
  • trunk/config/deploy.rb

    r1236 r1253  
    8585desc "clear all zafu compiled templates" 
    8686task :clear_zafu, :roles => :app do 
    87   run "#{in_current} rake zena:clear_zafu
     87  run "#{in_current} rake zena:clear_zafu RAILS_ENV=production
    8888end 
    8989 
  • trunk/test/functional/application_controller_test.rb

    r1185 r1253  
    1 =begin 
    21require File.dirname(__FILE__) + '/../test_helper' 
    3 require 'application
     2require 'nodes_controller
    43 
    54# Re-raise errors caught by the controller. 
    6 class ApplicationController; def rescue_action(e) raise e end; end 
     5class NodesController; def rescue_action(e) raise e end; end 
    76 
    8 class ApplicationControllerTest < ZenaTestController 
     7class NodesControllerTest < ZenaTestController 
    98   
    109  def setup 
    1110    super 
    12     @controller = ApplicationController.new 
     11    @controller = NodesController.new 
    1312    init_controller 
     13  end 
     14 
     15  def test_acts_as_secure 
    1416    login(:anon) 
    15     @controller.send(:params=, {}) 
     17    assert_nothing_raised { node = @controller.send(:secure,Node) { Node.find(nodes_id(:zena))}} 
    1618  end 
    1719   
    18   def test_acts_as_secur
    19     assert_nothing_raised { node = @controller.send(:secure,Node) { Node.find(ZENA_ENV[:root_id])}} 
    20   end 
    21    
     20  # invalid_template? tested in session_controller_test: test_render_invalid_templat
     21end 
     22 
     23=begin 
    2224  # render_and_cache and authorize tested in navigation_test.rb (integration test) 
    2325   
  • trunk/test/functional/nodes_controller_test.rb

    r1230 r1253  
    9494    end 
    9595  end 
     96   
    9697end 
    9798 
  • trunk/test/functional/session_controller_test.rb

    r901 r1253  
    1 =begin 
    21require File.dirname(__FILE__) + '/../test_helper' 
    32require 'session_controller' 
     
    1413  end 
    1514   
     15  def test_render_invalid_template 
     16    Version.connection.execute "UPDATE #{Version.table_name} SET text = 'empty' WHERE id = #{versions_id(:Node_login_zafu_en)}" 
     17    without_files('test.host/zafu') do 
     18      get 'new' 
     19      assert_response :success 
     20      assert_equal ["zafu", "default", "Node-+login", "en", "_main.erb"], @response.rendered_file.split('/')[-5..-1] 
     21      assert_match %r{There was a problem}, @response.body 
     22      assert_no_match %r{empty}, @response.body 
     23    end 
     24  end 
     25   
    1626  def test_login 
    1727    get 'new' 
    1828    assert_response :success 
    19     assert_equal @response.rendered_file.split('/')[-3..-1], ["Node_login.html", "en", "main.erb"
     29    assert_equal ["zafu", "default", "Node-+login", "en", "_main.erb"], @response.rendered_file.split('/')[-5..-1
    2030    assert_tag :tag=>"div", :attributes=>{:id=>'login_form'} 
    2131  end 
     
    2535    assert_not_nil session[:user] 
    2636    assert_equal users_id(:ant), session[:user] 
    27     assert_redirected_to user_home_url 
     37    assert_redirected_to user_path(users(:ant)) 
    2838  end 
    2939   
     
    5464  end 
    5565end 
    56 =end 
  • trunk/test/integration/navigation_test.rb

    r1207 r1253  
    220220    get 'http://test.host/en/section12_index.html' 
    221221    assert_response :missing 
    222     get 'http://test.host/en/section12_*index.html' 
     222    get 'http://test.host/en/section12_+index.html' 
    223223    assert_response :missing 
    224224  end 
     
    230230   
    231231  def test_show_with_internal_mode 
    232     get 'http://test.host/en/section12_*index.html' 
     232    get 'http://test.host/en/section12_+index.html' 
    233233    assert_response :missing 
    234234  end 
  • trunk/test/test_zena.rb

    r1197 r1253  
    261261 
    262262      def init_controller 
     263        $_test_site ||= 'zena' 
    263264        @request    ||= ActionController::TestRequest.new 
    264265        @response   ||= ActionController::TestResponse.new 
    265         @request.host = sites_host($_test_site || 'zena'
     266        @request.host = sites_host($_test_site
    266267        @controller.instance_eval { @params = {}; @url = ActionController::UrlRewriter.new( @request, {} )} 
    267268        @controller.instance_variable_set(:@response, @response)