examples/relevance/tarantula/crawler_example.rb in relevance-tarantula-0.2.1 vs examples/relevance/tarantula/crawler_example.rb in relevance-tarantula-0.3.2
- old
+ new
@@ -86,128 +86,118 @@
describe "queueing" do
it 'queues and remembers links' do
crawler = Relevance::Tarantula::Crawler.new
- crawler.expects(:transform_url).with("/url").returns("/transformed")
+ crawler.expects(:transform_url).with("/url").returns("/transformed").at_least_once
crawler.queue_link("/url")
- crawler.links_to_crawl.should == [Relevance::Tarantula::Link.new("/transformed")]
- crawler.links_queued.should == Set.new([Relevance::Tarantula::Link.new("/transformed")])
+ # TODO not sure this is the best way to test this anymore; relying on result of transform in both actual and expected
+ crawler.crawl_queue.should == [make_link("/url", crawler)]
+ crawler.links_queued.should == Set.new([make_link("/url", crawler)])
end
it 'queues and remembers forms' do
crawler = Relevance::Tarantula::Crawler.new
form = Hpricot('<form action="/action" method="post"/>').at('form')
- signature = Relevance::Tarantula::FormSubmission.new(Relevance::Tarantula::Form.new(form)).signature
+ signature = Relevance::Tarantula::FormSubmission.new(make_form(form)).signature
crawler.queue_form(form)
- crawler.forms_to_crawl.size.should == 1
+ crawler.crawl_queue.size.should == 1
crawler.form_signatures_queued.should == Set.new([signature])
end
- it 'remembers link referrer if there is one' do
+ it "passes link, self, and referrer when creating Link objects" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.queue_link("/url", "/some-referrer")
- crawler.referrers.should == {Relevance::Tarantula::Link.new("/url") => "/some-referrer"}
+ Relevance::Tarantula::Link.expects(:new).with('/url', crawler, '/some-referrer')
+ crawler.stubs(:should_skip_link?)
+ crawler.queue_link('/url', '/some-referrer')
end
end
describe "crawling" do
+ before do
+ @form = Hpricot('<form action="/action" method="post"/>').at('form')
+ end
- it "converts ActiveRecord::RecordNotFound into a 404" do
- (proxy = stub_everything).expects(:send).raises(ActiveRecord::RecordNotFound)
+ it "does two things with each link: crawl and blip" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.proxy = proxy
- response = crawler.crawl_form stub_everything(:method => nil)
- response.code.should == "404"
- response.content_type.should == "text/plain"
- response.body.should == "ActiveRecord::RecordNotFound"
- end
-
- it "does four things with each link: get, log, handle, and blip" do
- crawler = Relevance::Tarantula::Crawler.new
crawler.proxy = stub
- response = stub(:code => "200")
- crawler.links_to_crawl = [stub(:href => "/foo1", :method => :get), stub(:href => "/foo2", :method => :get)]
- crawler.proxy.expects(:get).returns(response).times(2)
- crawler.expects(:log).times(2)
- crawler.expects(:handle_link_results).times(2)
+ crawler.crawl_queue = links = [make_link("/foo1", crawler), make_link("/foo2", crawler)]
+
+ links.each{|link| link.expects(:crawl)}
crawler.expects(:blip).times(2)
- crawler.crawl_queued_links
- crawler.links_to_crawl.should == []
+
+ crawler.crawl_the_queue
+ crawler.crawl_queue.should == []
end
it "invokes queued forms, logs responses, and calls handlers" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.forms_to_crawl << stub_everything(:method => "get",
- :action => "/foo",
- :data => "some data",
- :to_s => "stub")
- crawler.proxy = stub_everything(:send => stub(:code => "200" ))
- crawler.expects(:log).with("Response 200 for stub")
+ crawler.crawl_queue << Relevance::Tarantula::FormSubmission.new(make_form(@form, crawler))
+ crawler.expects(:submit).returns(stub(:code => "200"))
crawler.expects(:blip)
- crawler.crawl_queued_forms
+ crawler.crawl_the_queue
end
- it "breaks out early if a timeout is set" do
- crawler = Relevance::Tarantula::Crawler.new
- stub_puts_and_print(crawler)
- crawler.proxy = stub
- response = stub(:code => "200")
- crawler.links_to_crawl = [stub(:href => "/foo", :method => :get)]
- crawler.proxy.expects(:get).returns(response).times(4)
- crawler.forms_to_crawl << stub_everything(:method => "post",
- :action => "/foo",
- :data => "some data",
- :to_s => "stub")
- crawler.proxy.expects(:post).returns(response).times(2)
- crawler.expects(:links_completed_count).returns(0,1,2,3,4,5).times(6)
- crawler.times_to_crawl = 2
- crawler.crawl
-
- end
+ # TODO this is the same as "resets to the initial links/forms ..." and doesn't appear to test anything related to a timeout.
+ it "breaks out early if a timeout is set"
it "resets to the initial links/forms on subsequent crawls when times_to_crawl > 1" do
crawler = Relevance::Tarantula::Crawler.new
stub_puts_and_print(crawler)
- crawler.proxy = stub
response = stub(:code => "200")
- crawler.links_to_crawl = [stub(:href => "/foo", :method => :get)]
- crawler.proxy.expects(:get).returns(response).times(4) # (stub and "/") * 2
- crawler.forms_to_crawl << stub_everything(:method => "post",
- :action => "/foo",
- :data => "some data",
- :to_s => "stub")
- crawler.proxy.expects(:post).returns(response).times(2)
- crawler.expects(:links_completed_count).returns(0,1,2,3,4,5).times(6)
+ crawler.queue_link('/foo')
+ crawler.expects(:follow).returns(response).times(4) # (stub and "/") * 2
+ crawler.queue_form(@form)
+ crawler.expects(:submit).returns(response).times(2)
+ crawler.expects(:blip).times(6)
crawler.times_to_crawl = 2
crawler.crawl
end
end
describe "report_results" do
-
+ it "prints a final summary line" do
+ crawler = Relevance::Tarantula::Crawler.new
+ crawler.stubs(:generate_reports)
+ crawler.expects(:total_links_count).returns(42)
+ crawler.expects(:puts).with("Crawled 42 links and forms.")
+ crawler.report_results
+ end
+
it "delegates to generate_reports" do
crawler = Relevance::Tarantula::Crawler.new
+ crawler.stubs(:puts)
crawler.expects(:generate_reports)
crawler.report_results
end
end
describe "blip" do
it "blips the current progress if !verbose" do
+ $stdout.stubs(:tty?).returns(true)
crawler = Relevance::Tarantula::Crawler.new
crawler.stubs(:verbose).returns false
crawler.stubs(:timeout_if_too_long)
crawler.expects(:print).with("\r 0 of 0 links completed ")
crawler.blip
end
+ it "suppresses the blip message if not writing to a tty" do
+ $stdout.stubs(:tty?).returns(false)
+ crawler = Relevance::Tarantula::Crawler.new
+ crawler.stubs(:verbose).returns false
+ crawler.stubs(:timeout_if_too_long)
+ crawler.expects(:print).never
+ crawler.blip
+ end
+
it "blips nothing if verbose" do
+ $stdout.stubs(:tty?).returns(true)
crawler = Relevance::Tarantula::Crawler.new
crawler.stubs(:verbose).returns true
crawler.expects(:print).never
crawler.blip
end
@@ -221,27 +211,26 @@
crawler.finished?.should == true
end
it "isn't finished when links remain" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.links_to_crawl = [:stub_link]
+ crawler.crawl_queue = [:stub_link]
crawler.finished?.should == false
end
- it "isn't finished when links remain" do
+ it "isn't finished when forms remain" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.forms_to_crawl = [:stub_form]
+ crawler.crawl_queue = [:stub_form]
crawler.finished?.should == false
end
end
it "crawls links and forms again and again until finished?==true" do
crawler = Relevance::Tarantula::Crawler.new
crawler.expects(:finished?).times(3).returns(false, false, true)
- crawler.expects(:crawl_queued_links).times(2)
- crawler.expects(:crawl_queued_forms).times(2)
+ crawler.expects(:crawl_the_queue).times(2)
crawler.do_crawl(1)
end
it "asks each reporter to write its report in report_dir" do
crawler = Relevance::Tarantula::Crawler.new
@@ -260,52 +249,52 @@
crawler.report_dir.should == "faux_rails_root/tmp/tarantula"
end
it "skips links that are already queued" do
crawler = Relevance::Tarantula::Crawler.new
- crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == false
- crawler.queue_link("/foo").should == Relevance::Tarantula::Link.new("/foo")
- crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == true
+ crawler.should_skip_link?(make_link("/foo")).should == false
+ crawler.queue_link("/foo").should == make_link("/foo")
+ crawler.should_skip_link?(make_link("/foo")).should == true
end
describe "link skipping" do
before { @crawler = Relevance::Tarantula::Crawler.new }
it "skips links that are too long" do
- @crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == false
+ @crawler.should_skip_link?(make_link("/foo")).should == false
@crawler.max_url_length = 2
@crawler.expects(:log).with("Skipping long url /foo")
- @crawler.should_skip_link?(Relevance::Tarantula::Link.new("/foo")).should == true
+ @crawler.should_skip_link?(make_link("/foo")).should == true
end
it "skips outbound links (those that begin with http)" do
@crawler.expects(:log).with("Skipping http-anything")
- @crawler.should_skip_link?(Relevance::Tarantula::Link.new("http-anything")).should == true
+ @crawler.should_skip_link?(make_link("http-anything")).should == true
end
it "skips javascript links (those that begin with javascript)" do
@crawler.expects(:log).with("Skipping javascript-anything")
- @crawler.should_skip_link?(Relevance::Tarantula::Link.new("javascript-anything")).should == true
+ @crawler.should_skip_link?(make_link("javascript-anything")).should == true
end
it "skips mailto links (those that begin with http)" do
@crawler.expects(:log).with("Skipping mailto-anything")
- @crawler.should_skip_link?(Relevance::Tarantula::Link.new("mailto-anything")).should == true
+ @crawler.should_skip_link?(make_link("mailto-anything")).should == true
end
it 'skips blank links' do
@crawler.queue_link(nil)
- @crawler.links_to_crawl.should == []
+ @crawler.crawl_queue.should == []
@crawler.queue_link("")
- @crawler.links_to_crawl.should == []
+ @crawler.crawl_queue.should == []
end
it "logs and skips links that match a pattern" do
@crawler.expects(:log).with("Skipping /the-red-button")
@crawler.skip_uri_patterns << /red-button/
- @crawler.queue_link("/blue-button").should == Relevance::Tarantula::Link.new("/blue-button")
+ @crawler.queue_link("/blue-button").should == make_link("/blue-button")
@crawler.queue_link("/the-red-button").should == nil
end
it "logs and skips form submissions that match a pattern" do
@crawler.expects(:log).with("Skipping /reset-password-form")
@@ -369,10 +358,10 @@
Time.stubs(:now).returns(start_time, elasped_time_check)
crawler = Relevance::Tarantula::Crawler.new
crawler.crawl_timeout = 5.minutes
- crawler.links_to_crawl = [stub(:href => "/foo1", :method => :get), stub(:href => "/foo2", :method => :get)]
+ crawler.crawl_queue = [stub(:href => "/foo1", :method => :get), stub(:href => "/foo2", :method => :get)]
crawler.proxy = stub
crawler.proxy.stubs(:get).returns(response = stub(:code => "200"))
stub_puts_and_print(crawler)
lambda {
\ No newline at end of file