require File.expand_path(File.dirname(__FILE__) + "/../spec_helper") describe "click_link" do it "should click links with ampertands" do with_html <<-HTML Save & go back HTML webrat_session.should_receive(:get).with("/page", {}) click_link "Save & go back" end it "should use get by default" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "Link text" end it "should click get links" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "Link text", :method => :get end it "should click link on substring" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "ink tex", :method => :get end it "should click delete links" do with_html <<-HTML Link text HTML webrat_session.should_receive(:delete).with("/page", {}) click_link "Link text", :method => :delete end it "should click post links" do with_html <<-HTML Link text HTML webrat_session.should_receive(:post).with("/page", {}) click_link "Link text", :method => :post end it "should click put links" do with_html <<-HTML Link text HTML webrat_session.should_receive(:put).with("/page", {}) click_link "Link text", :method => :put end it "should click links by regexp" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link /link [a-z]/i end it "should click links by id" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "link_text_link" end it "should click links by id regexp" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link /_text_/ end it "should click links by title" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link 'piddle' end it "should click links by title regex" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link /iddle/ end it "should click rails javascript links with authenticity tokens" do with_html <<-HTML Posts HTML webrat_session.should_receive(:post).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62") click_link "Posts" end it "should click rails javascript delete links" do with_html <<-HTML Delete HTML webrat_session.should_receive(:delete).with("/posts/1", {}) click_link "Delete" end it "should click rails javascript post links" do with_html <<-HTML Posts HTML webrat_session.should_receive(:post).with("/posts", {}) click_link "Posts" end it "should click rails javascript post links without javascript" do with_html <<-HTML Posts HTML webrat_session.should_receive(:get).with("/posts", {}) click_link "Posts", :javascript => false end it "should click rails javascript put links" do with_html <<-HTML Put HTML webrat_session.should_receive(:put).with("/posts", {}) click_link "Put" end it "should fail if the javascript link doesn't have a value for the _method input" do with_html <<-HTML Link HTML lambda { click_link "Link" }.should raise_error(Webrat::WebratError) end it "should assert valid response" do with_html <<-HTML Link text HTML webrat_session.response_code = 501 lambda { click_link "Link text" }.should raise_error(Webrat::PageLoadError) end [200, 300, 400, 499].each do |status| it "should consider the #{status} status code as success" do with_html <<-HTML Link text HTML webrat_session.stub!(:redirect? => false) webrat_session.response_code = status lambda { click_link "Link text" }.should_not raise_error end end it "should fail is the link doesn't exist" do with_html <<-HTML Link text HTML lambda { click_link "Missing link" }.should raise_error(Webrat::NotFoundError) end it "should not be case sensitive" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "LINK TEXT" end it "should match link substrings" do with_html <<-HTML This is some cool link text, isn't it? HTML webrat_session.should_receive(:get).with("/page", {}) click_link "Link text" end it "should work with elements in the link" do with_html <<-HTML Link text HTML webrat_session.should_receive(:get).with("/page", {}) click_link "Link text" end it "should match the first matching link" do with_html <<-HTML Link text Link text HTML webrat_session.should_receive(:get).with("/page1", {}) click_link "Link text" end it "should choose the shortest link text match" do with_html <<-HTML Linkerama Link HTML webrat_session.should_receive(:get).with("/page2", {}) click_link "Link" end it "should treat non-breaking spaces as spaces" do with_html <<-HTML This is a link HTML webrat_session.should_receive(:get).with("/page1", {}) click_link "This is a link" end it "should not match on non-text contents" do pending "needs fix" do with_html <<-HTML My house Location HTML webrat_session.should_receive(:get).with("/page2", {}) click_link "Location" end end it "should click link within a selector" do with_html <<-HTML Link
Link
HTML webrat_session.should_receive(:get).with("/page2", {}) click_link_within "#container", "Link" end it "should not make request when link is local anchor" do with_html <<-HTML Jump to Section 1 HTML # Don't know why webrat_session.should_receive(:get).never doesn't work here webrat_session.should_receive(:send).with('get_via_redirect', '#section-1', {}).never click_link "Jump to Section 1" end it "should follow relative links" do webrat_session.stub!(:current_url => "/page") with_html <<-HTML Jump to sub page HTML webrat_session.should_receive(:get).with("/page/sub", {}) click_link "Jump to sub page" end it "should follow fully qualified local links" do webrat_session.stub!(:current_url => "/page") with_html <<-HTML Jump to sub page HTML webrat_session.should_receive(:get).with("http://subdomain.example.com/page/sub", {}) click_link "Jump to sub page" end it "should follow fully qualified local links to example.com" do with_html <<-HTML Jump to sub page HTML webrat_session.should_receive(:get).with("http://www.example.com/page/sub", {}) click_link "Jump to sub page" end it "should follow query parameters" do webrat_session.stub!(:current_url => "/page") with_html <<-HTML Jump to foo bar HTML webrat_session.should_receive(:get).with("/page?foo=bar", {}) click_link "Jump to foo bar" end it "should matches_text? on regexp" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return(@link_text_with_nbsp) link.matches_text?(/link/i).should == 0 end it "should matches_text? on link_text" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return(@link_text_with_nbsp) link.matches_text?("Link Text").should == 0 end it "should matches_text? on substring" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return(@link_text_with_nbsp) link.matches_text?("nk Te").should_not be_nil end it "should not matches_text? on link_text case insensitive" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return(@link_text_with_nbsp) link.should_receive(:inner_html).and_return('Link Text') link.should_receive(:title).and_return(nil) link.matches_text?("link_text").should == false end it "should match text not include  " do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return('LinkText') link.matches_text?("LinkText").should == 0 end it "should not matches_text? on wrong text" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) nbsp = [0xA0].pack("U") link.should_receive(:text).and_return("Some"+nbsp+"Other"+nbsp+"Link") link.should_receive(:inner_html).and_return("Some Other Link") link.should_receive(:title).and_return(nil) link.matches_text?("Link Text").should == false end it "should match text including character reference" do pending "need to update these" no_ko_gi_ri = [0x30CE,0x30B3,0x30AE,0x30EA] nokogiri_ja_kana = no_ko_gi_ri.pack("U*") nokogiri_char_ref = no_ko_gi_ri.map{|c| "&#x%X;" % c }.join("") link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return(nokogiri_ja_kana) link.matches_text?(nokogiri_ja_kana).should == 0 end it "should match img link" do pending "need to update these" link = Webrat::Link.new(webrat_session, nil) link.should_receive(:text).and_return('') link.should_receive(:inner_html).and_return('') link.matches_text?('logo.png').should == 10 end end