spec/rackamole/mole_spec.rb in rackamole-0.0.4 vs spec/rackamole/mole_spec.rb in rackamole-0.0.6

- old
+ new

@@ -1,18 +1,18 @@ require File.join(File.dirname(__FILE__), %w[.. spec_helper]) -require 'actionpack' +# require 'actionpack' describe Rack::Mole do include Rack::Test::Methods before :each do @response = [ 200, {"Content-Type" => "text/plain"}, ["success"] ] + @test_env = { 'rack.session' => { :user_id => 100 }, 'HTTP_X_FORWARDED_FOR' => '1.1.1.1', 'HTTP_USER_AGENT' => "Firefox" } end class TestStore - attr_accessor :mole_result - + attr_accessor :mole_result def mole( args ) @mole_result = args end end @@ -22,15 +22,38 @@ use Rack::Lint use Rack::Mole, opts run lambda { |env| response } end end - + + def error_app( opts={} ) + @app ||= Rack::Builder.new do + use Rack::Lint + use Rack::Mole, opts + run lambda { |env| raise "Oh Snap!" } + end + end + + it "should mole a framwework exception correctly" do + @test_store = TestStore.new + error_app( + :app_name => "Test App", + :environment => :test, + :perf_threshold => 0.1, + :user_key => { :session_key => :user_id, :extractor => lambda{ |k| "Test user #{k}"} }, + :store => @test_store ) + + begin + get "/", nil, @test_env + rescue + @test_store.mole_result[:stack].should have(4).items + end + end + describe 'moling a request' do before :each do @test_store = TestStore.new - @test_env = { 'rack.session' => { :user_id => 100 }, 'HTTP_X_FORWARDED_FOR' => '1.1.1.1', 'HTTP_USER_AGENT' => "IBrowse" } app( :app_name => "Test App", :environment => :test, :perf_threshold => 0.1, :user_key => { :session_key => :user_id, :extractor => lambda{ |k| "Test user #{k}"} }, @@ -42,49 +65,63 @@ @test_store.mole_result[:app_name].should == "Test App" @test_store.mole_result[:environment].should == :test @test_store.mole_result[:user_id].should == 100 @test_store.mole_result[:user_name].should == 'Test user 100' @test_store.mole_result[:ip].should == '1.1.1.1' - @test_store.mole_result[:browser].should == 'IBrowse' + @test_store.mole_result[:browser].should == 'Firefox' @test_store.mole_result[:method].should == 'GET' @test_store.mole_result[:url].should == 'http://example.org/' @test_store.mole_result[:path].should == '/' - @test_store.mole_result[:perf_issue].should == false + @test_store.mole_result[:performance].should == false @test_store.mole_result[:params].should be_nil @test_store.mole_result[:session].should_not be_nil @test_store.mole_result[:session].should == { :user_id => '100' } end it "mole an exception correctly" do begin raise 'Oh snap!' rescue => boom - get "/", nil, { 'mole.exception' => boom, 'rack.session' => { :user_id => 100 }, 'HTTP_X_FORWARDED_FOR' => '1.1.1.1', 'HTTP_USER_AGENT' => "IBrowse" } + get "/", nil, @test_env.merge( { 'mole.exception' => boom } ) @test_store.mole_result[:stack].should have(4).items end end - + it "should capture request parameters correctly" do get "/", { :blee => 'duh' }, @test_env @test_store.mole_result[:params].should == { :blee => "duh".to_json } end end describe 'username in session' do before :each do @test_store = TestStore.new - @test_env = { 'rack.session' => { :user_name => "Fernand" } } app( :app_name => "Test App", :environment => :test, :perf_threshold => 0.1, :user_key => :user_name, :store => @test_store ) end - it "should mole the user correctly" do - get "/", nil, @test_env - @test_store.mole_result[:user_id].should be_nil - @test_store.mole_result[:user_name].should == 'Fernand' - end + it "should pickup the user name from the session correctly" do + get "/", nil, @test_env.merge( { 'rack.session' => { :user_name => "Fernand" } } ) + @test_store.mole_result[:user_id].should be_nil + @test_store.mole_result[:user_name].should == 'Fernand' + end + end + + describe '#id_browser' do + before :all do + @rack = Rack::Mole.new( nil ) + end + + it "should detect a browser type correctly" do + browser = @rack.send( :id_browser, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; InfoPath.2; MS-RTC LM 8; SPC 3.1 P1 Ta)") + browser.should == 'MSIE 7.0' + end + + it "should return unknow if can't detect it" do + @rack.send( :id_browser, 'IBrowse' ).should == 'N/A' + end end end