Skip to content
This repository
tree: f0523f72b4
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 173 lines (137 sloc) 4.043 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
require "abstract_unit"
require "rails/log_subscriber/test_helper"
require "action_controller/railties/log_subscriber"

module Another
  class LogSubscribersController < ActionController::Base
    def show
      render :nothing => true
    end

    def redirector
      redirect_to "http://foo.bar/"
    end

    def data_sender
      send_data "cool data", :filename => "file.txt"
    end

    def xfile_sender
      send_file File.expand_path("company.rb", FIXTURE_LOAD_PATH), :x_sendfile => true
    end

    def file_sender
      send_file File.expand_path("company.rb", FIXTURE_LOAD_PATH)
    end

    def with_fragment_cache
      render :inline => "<%= cache('foo'){ 'bar' } %>"
    end

    def with_page_cache
      cache_page("Super soaker", "/index.html")
      render :nothing => true
    end
  end
end

class ACLogSubscriberTest < ActionController::TestCase
  tests Another::LogSubscribersController
  include Rails::LogSubscriber::TestHelper

  def setup
    @old_logger = ActionController::Base.logger

    @cache_path = File.expand_path('../temp/test_cache', File.dirname(__FILE__))
    ActionController::Base.page_cache_directory = @cache_path
    ActionController::Base.cache_store = :file_store, @cache_path

    Rails::LogSubscriber.add(:action_controller, ActionController::Railties::LogSubscriber.new)
    super
  end

  def teardown
    super
    Rails::LogSubscriber.log_subscribers.clear
    FileUtils.rm_rf(@cache_path)
    ActionController::Base.logger = @old_logger
  end

  def set_logger(logger)
    ActionController::Base.logger = logger
  end

  def test_start_processing
    get :show
    wait
    assert_equal 2, logs.size
    assert_equal "Processing by Another::LogSubscribersController#show as HTML", logs.first
  end

  def test_process_action
    get :show
    wait
    assert_equal 2, logs.size
    assert_match /Completed/, logs.last
    assert_match /200 OK/, logs.last
  end

  def test_process_action_without_parameters
    get :show
    wait
    assert_nil logs.detect {|l| l =~ /Parameters/ }
  end

  def test_process_action_with_parameters
    get :show, :id => '10'
    wait

    assert_equal 3, logs.size
    assert_equal 'Parameters: {"id"=>"10"}', logs[1]
  end

  def test_process_action_with_view_runtime
    get :show
    wait
    assert_match /\(Views: [\d\.]+ms\)/, logs[1]
  end

  def test_process_action_with_filter_parameters
    @request.env["action_dispatch.parameter_filter"] = [:lifo, :amount]

    get :show, :lifo => 'Pratik', :amount => '420', :step => '1'
    wait

    params = logs[1]
    assert_match /"amount"=>"\[FILTERED\]"/, params
    assert_match /"lifo"=>"\[FILTERED\]"/, params
    assert_match /"step"=>"1"/, params
  end

  def test_redirect_to
    get :redirector
    wait

    assert_equal 3, logs.size
    assert_equal "Redirected to http://foo.bar/", logs[1]
  end

  def test_send_data
    get :data_sender
    wait

    assert_equal 3, logs.size
    assert_match /Sent data file\.txt/, logs[1]
  end

  def test_send_file
    get :file_sender
    wait

    assert_equal 3, logs.size
    assert_match /Sent file/, logs[1]
    assert_match /test\/fixtures\/company\.rb/, logs[1]
  end

  def test_send_xfile
    get :xfile_sender
    wait

    assert_equal 3, logs.size
    assert_match /Sent X\-Sendfile header/, logs[1]
    assert_match /test\/fixtures\/company\.rb/, logs[1]
  end

  def test_with_fragment_cache
    ActionController::Base.perform_caching = true
    get :with_fragment_cache
    wait

    assert_equal 4, logs.size
    assert_match /Exist fragment\? views\/foo/, logs[1]
    assert_match /Write fragment views\/foo/, logs[2]
  ensure
    ActionController::Base.perform_caching = true
  end

  def test_with_page_cache
    ActionController::Base.perform_caching = true
    get :with_page_cache
    wait

    assert_equal 3, logs.size
    assert_match /Write page/, logs[1]
    assert_match /\/index\.html/, logs[1]
  ensure
    ActionController::Base.perform_caching = true
  end

  def logs
    @logs ||= @logger.logged(:info)
  end
end
Something went wrong with that request. Please try again.