bigdir/lib/rack-mini-profiler/spec/components/client_timer_struct_spec.rb

163 lines
3.8 KiB
Ruby

require 'spec_helper'
require 'rack-mini-profiler'
require 'yaml'
describe Rack::MiniProfiler::ClientTimerStruct do
def new_page
Rack::MiniProfiler::PageTimerStruct.new({})
end
def fixture(name)
YAML.load(File.open(File.dirname(__FILE__) + "/../fixtures/#{name}.yml"))
end
before do
@client = Rack::MiniProfiler::ClientTimerStruct.new
end
it 'defaults to no attributes' do
::JSON.parse(@client.to_json).should be_empty
end
describe 'init_from_form_data' do
describe 'without a form' do
before do
@client = Rack::MiniProfiler::ClientTimerStruct.init_from_form_data({}, new_page)
end
it 'is null' do
@client.should be_nil
end
end
describe 'with a simple request' do
before do
@client = Rack::MiniProfiler::ClientTimerStruct.init_from_form_data(fixture(:simple_client_request), new_page)
end
it 'has the correct RedirectCount' do
@client['RedirectCount'].should == 1
end
it 'has Timings' do
@client['Timings'].should_not be_empty
end
describe "bob.js" do
before do
@bob = @client['Timings'].find {|t| t["Name"] == "bob.js"}
end
it 'has it in the timings' do
@bob.should_not be_nil
end
it 'has the correct duration' do
@bob["Duration"].should == 6
end
end
describe "Navigation" do
before do
@nav = @client['Timings'].find {|t| t["Name"] == "Navigation"}
end
it 'has a Timing for the Navigation' do
@nav.should_not be_nil
end
it 'has the correct start' do
@nav['Start'].should == 0
end
it 'has the correct duration' do
@nav['Duration'].should == 16
end
end
describe "Simple" do
before do
@simple = @client['Timings'].find {|t| t["Name"] == "Simple"}
end
it 'has a Timing for the Simple' do
@simple.should_not be_nil
end
it 'has the correct start' do
@simple['Start'].should == 1
end
it 'has the correct duration' do
@simple['Duration'].should == 10
end
end
end
describe 'with some odd values' do
before do
@client = Rack::MiniProfiler::ClientTimerStruct.init_from_form_data(fixture(:weird_client_request), new_page)
end
it 'has the correct RedirectCount' do
@client['RedirectCount'].should == 99
end
it 'has Timings' do
@client['Timings'].should_not be_empty
end
it 'has no timing when the start is before Navigation' do
@client['Timings'].find {|t| t["Name"] == "Previous"}.should be_nil
end
describe "weird" do
before do
@weird = @client['Timings'].find {|t| t["Name"] == "Weird"}
end
it 'has a Timing for the Weird' do
@weird.should_not be_nil
end
it 'has the correct start' do
@weird['Start'].should == 11
end
it 'has a 0 duration because start time is greater than end time' do
@weird['Duration'].should == 0
end
end
describe "differentFormat" do
before do
@diff = @client['Timings'].find {|t| t["Name"] == "differentFormat"}
end
it 'has a Timing for the differentFormat' do
@diff.should_not be_nil
end
it 'has the correct start' do
@diff['Start'].should == 1
end
it 'has a -1 duration because the format was different' do
@diff['Duration'].should == -1
end
end
end
end
end