require File.dirname(__FILE__) + '/helper' class LoggerTest < Test::Unit::TestCase def stub_http(response, body = nil) response.stubs(:body => body) if body @http = stub(:post => response, :read_timeout= => nil, :open_timeout= => nil, :use_ssl= => nil) Net::HTTP.stubs(:new).returns(@http) end def send_notice HoptoadNotifier.sender.send_to_hoptoad('data') end def stub_verbose_log HoptoadNotifier.stubs(:write_verbose_log) end def assert_logged(expected) assert_received(HoptoadNotifier, :write_verbose_log) do |expect| expect.with {|actual| actual =~ expected } end end def assert_not_logged(expected) assert_received(HoptoadNotifier, :write_verbose_log) do |expect| expect.with {|actual| actual =~ expected }.never end end def configure HoptoadNotifier.configure { |config| } end should "report that notifier is ready when configured" do stub_verbose_log configure assert_logged /Notifier (.*) ready/ end should "not report that notifier is ready when internally configured" do stub_verbose_log HoptoadNotifier.configure(true) { |config| } assert_not_logged /.*/ end should "print environment info a successful notification without a body" do reset_config stub_verbose_log stub_http(Net::HTTPSuccess) send_notice assert_logged /Environment Info:/ assert_not_logged /Response from Hoptoad:/ end should "print environment info on a failed notification without a body" do reset_config stub_verbose_log stub_http(Net::HTTPError) send_notice assert_logged /Environment Info:/ assert_not_logged /Response from Hoptoad:/ end should "print environment info and response on a success with a body" do reset_config stub_verbose_log stub_http(Net::HTTPSuccess, 'test') send_notice assert_logged /Environment Info:/ assert_logged /Response from Hoptoad:/ end should "print environment info and response on a failure with a body" do reset_config stub_verbose_log stub_http(Net::HTTPError, 'test') send_notice assert_logged /Environment Info:/ assert_logged /Response from Hoptoad:/ end end