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