require "spec_helper" describe "Relevance::Tarantula::Link" do include ActionView::Helpers::UrlHelper it "does not raise an error when initializing without href attribtue" do link = make_link(Hpricot('foo').at('a')) link.href.should == nil link.meth.should == :get end it "parses anchor tags" do link = make_link(Hpricot('foo').at('a')) link.href.should == '/foo' link.meth.should == :get end it "parses anchor tags with POST 'method'" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :post end it "parses anchor tags with POST data-method" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :post end it "parses anchor tags with PUT 'method'" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :put end it "parses anchor tags with PUT data-method" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :put end it "parses anchor tags with PATCH data-method" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :patch end it "parses anchor tags with DELETE 'method'" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :delete end it "parses anchor tags with DELETE data-method" do link = make_link(Hpricot(%Q{foo}).at('a')) link.href.should == '/foo' link.meth.should == :delete end it "parses link tags with text" do link = make_link(Hpricot('bar').at('link')) link.href.should == '/bar' link.meth.should == :get end it "parses link tags without text" do link = make_link(Hpricot('').at('link')) link.href.should == '/bar' link.meth.should == :get end it 'remembers link referrer if there is one' do link = make_link('/url', stub_everything, '/some-referrer') link.referrer.should == '/some-referrer' end it "does two things when crawled: follow, log, and handle" do crawler = Relevance::Tarantula::Crawler.new link = make_link('/foo', crawler) response = stub(:code => "200") crawler.expects(:follow).returns(response) link.expects(:log) crawler.expects(:handle_link_results) link.crawl end # method_javascript_function needs this method def protect_against_forgery? false end end describe "possible conflict when user has an AR model named Link" do it "does not taint Object with Relevance::Tarantula" do Object.ancestors.should_not include(Relevance::Tarantula) end it "doesnt break with a Link model" do lambda { class Link < ActiveRecord::Base end }.should_not raise_error end end