spec/basic_spec.rb in divining_rod-0.2.0 vs spec/basic_spec.rb in divining_rod-0.3.0

- old
+ new

@@ -1,86 +1,151 @@ require 'spec_helper' describe DiviningRod do - + before :each do @request = mock("rails_request", :user_agent => 'My iPhone') DiviningRod::Matchers.clear_definitions DiviningRod::Matchers.define do |map| - map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] - map.default(:unknown) + map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] end end - + it "should recognize an iPhone" do profile = DiviningRod::Profile.new(@request) profile.format.should eql(:webkit) end - + it "should know if it belongs to a category tag" do profile = DiviningRod::Profile.new(@request) profile.geolocate?.should be_true end - + it "should know if it does not belongs to a category" do profile = DiviningRod::Profile.new(@request) profile.wap?.should be_false end - it "should use the default group for unknown phones" do - @request = mock("rails_request", :user_agent => 'My Foo Phone') - profile = DiviningRod::Profile.new(@request) - profile.wap?.should be_false + describe "without a default route" do + + before :each do + @request = mock("rails_request", :user_agent => 'My Foo Fone', :format => :html) + DiviningRod::Matchers.clear_definitions + DiviningRod::Matchers.define do |map| + map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] + end + end + + it "should use the default group for unknown phones" do + profile = DiviningRod::Profile.new(@request) + profile.wap?.should be_false + profile.format.should eql(:html) + end + end - describe "without a default definition" do + + describe "with a default route" do before :each do + @request = mock("rails_request", :user_agent => 'My Foo Fone') + DiviningRod::Matchers.clear_definitions + DiviningRod::Matchers.define do |map| + map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] + map.default :html + end + end + + it "should use the default group for unknown phones" do + profile = DiviningRod::Profile.new(@request) + profile.wap?.should be_false + profile.format.should eql(:html) + end + + end + + describe "without a default definition" do + + before :each do @request = mock("rails_request", :user_agent => 'Foo Fone') DiviningRod::Matchers.clear_definitions DiviningRod::Matchers.define do |map| - map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] + map.ua /iPhone/, :webkit, :tags => [:iphone, :youtube, :geolocate] end end - + it "should not find a match" do DiviningRod::Profile.new(@request).recognized?.should be_false end - + end + describe "matching a subdomain" do + + before :each do + @request = mock("rails_request", :user_agent => 'Foo Fone', :subdomains => ['wap']) + DiviningRod::Matchers.clear_definitions + DiviningRod::Matchers.define do |map| + map.subdomain /wap/, :wap, :tags => [:shitty] + end + end + + it "should not find a match" do + DiviningRod::Profile.new(@request).recognized?.should be_true + profile = DiviningRod::Profile.new(@request) + profile.wap? + end + + end + + describe "matching the weird requests(no user_agent passed)" do + + before :each do + @request = mock("rails_request", :user_agent => nil, :subdomains => []) + DiviningRod::Matchers.clear_definitions + DiviningRod::Matchers.define do |map| + map.ua /iPhone/, :wap, :tags => [:shitty] + end + end + + it "should not find a match" do + DiviningRod::Profile.new(@request).recognized?.should be_false + end + + end + end describe DiviningRod::Matchers do - + before :each do @request = mock("rails_request", :user_agent => 'iPhone Foo') DiviningRod::Matchers.clear_definitions DiviningRod::Matchers.define do |map| - map.ua /iPhone/, :iphone, :tags => [:iphone, :youtube] + map.ua /iPhone/, :iphone, :tags => [:iphone, :youtube] end end - + it "should recognize an iPhone" do DiviningRod::Matchers.definitions.first.matches?(@request).should be_true DiviningRod::Matchers.definitions.first.group.should eql(:iphone) end - + describe "defining a default definition" do - + before :each do @request = mock("rails_request", :user_agent => 'Foo Fone') DiviningRod::Matchers.clear_definitions DiviningRod::Matchers.define do |map| - map.default :unknown, :tags => [:html] + map.default :unknown, :tags => [:html] end end - + it "should use the default route if no other match is found" do DiviningRod::Matchers.definitions.first.matches?(@request).should be_true DiviningRod::Matchers.definitions.first.group.should eql(:unknown) end - + end - -end \ No newline at end of file + +end