require File.dirname(__FILE__) + '/../../spec_helper' describe RequestLogAnalyzer::Request do before(:each) do @request = testing_format.request end it "should be empty without any captured lines in it" do @request.should be_empty end context :incomplete do before(:each) do @request << { :line_type => :test, :lineno => 1, :test_capture => 'awesome!' } end it "should be single if only one line has been added" do @request.should_not be_empty end it "should not be a completed request" do @request.should_not be_completed end it "should take the line type of the first line as global line_type" do @request.lines[0][:line_type].should == :test @request.should =~ :test end it "should return the first field value" do @request[:test_capture].should == 'awesome!' end it "should return nil if no such field is present" do @request[:nonexisting].should be_nil end end context :completed do before(:each) do @request << { :line_type => :first, :lineno => 1, :name => 'first line!' } @request << { :line_type => :test, :lineno => 4, :test_capture => 'testing' } @request << { :line_type => :test, :lineno => 7, :test_capture => 'testing some more' } @request << { :line_type => :last, :lineno => 10, :time => 0.03 } end it "should not be empty when multiple liness are added" do @request.should_not be_empty end it "should be a completed request" do @request.should be_completed end it "should recognize all line types" do [:first, :test, :last].each { |type| @request.should =~ type } end it "should detect the correct field value" do @request[:name].should == 'first line!' @request[:time].should == 0.03 end it "should detect the first matching field value" do @request.first(:test_capture).should == 'testing' end it "should detect the every matching field value" do @request.every(:test_capture).should == ['testing', "testing some more"] end it "should set the first_lineno for a request to the lowest lineno encountered" do @request.first_lineno.should eql(1) end it "should set the first_lineno for a request if a line with a lower lineno is added" do @request << { :line_type => :test, :lineno => 0 } @request.first_lineno.should eql(0) end it "should set the last_lineno for a request to the highest encountered lineno" do @request.last_lineno.should eql(10) end it "should not set the last_lineno for a request if a line with a lower lineno is added" do @request << { :line_type => :test, :lineno => 7 } @request.last_lineno.should eql(10) end it "should not have a timestamp if no such field is captured" do @request.timestamp.should be_nil end it "should set return a timestamp field if such a field is captured" do @request << { :line_type => :first, :lineno => 1, :name => 'first line!', :timestamp => Time.now} @request.timestamp.should_not be_nil end end context 'single line' do # combined is both a header and a footer line before(:each) { @request << { :line_type => :combined, :lineno => 1 } } it "should be a completed request if the line is both header and footer" do @request.should be_completed end end end