Sha256: 7dffc2261a3ebe7550a9f23e559eddcd6bf33ad1dd532aefc9c2e4d05a44777e

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

require 'spec_helper'
require 'moped'

describe Spidey::Strategies::Moped do
  class TestMopedSpider < Spidey::AbstractSpider
    include Spidey::Strategies::Moped
    handle "http://www.cnn.com", :process_home

    def result_key(data)
      data[:detail_url]
    end
  end

  before(:each) do
    @db = Moped::Session.new(['127.0.0.1:27017'])
    @db.use 'spidey-mongo-test'
    @spider = TestMopedSpider.new(
      url_collection: @db['urls'],
      result_collection: @db['results'],
      error_collection: @db['errors'])
  end

  after(:each) do
    %w{ urls results errors }.each{ |col| @db[col].drop }
  end

  it "should add initial URLs to collection" do
    doc = @db['urls'].find(url: "http://www.cnn.com").first
    doc['handler'].should == :process_home
    doc['spider'].should == 'TestMopedSpider'
  end

  it "should not add duplicate URLs" do
    @spider.send :handle, "http://www.cnn.com", :process_home
    @db['urls'].find(url: "http://www.cnn.com").count.should == 1
  end

  it "should add results" do
    @spider.record detail_url: 'http://www.cnn.com', foo: 'bar'
    @db['results'].find.count.should == 1
    doc = @db['results'].find.first
    doc['detail_url'].should == 'http://www.cnn.com'
    doc['foo'].should == 'bar'
    doc['spider'].should == 'TestMopedSpider'
  end

  it "should update existing result" do
    @db['results'].insert key: 'http://foo.bar', detail_url: 'http://foo.bar'
    @spider.record detail_url: 'http://foo.bar', foo: 'bar'
    @db['results'].find.count.should == 1
  end

  it "should add error" do
    @spider.add_error error: Exception.new("WTF"), url: "http://www.cnn.com", handler: :blah
    doc = @db['errors'].find.first
    doc['error'].should == 'Exception'
    doc['url'].should == 'http://www.cnn.com'
    doc['handler'].should == :blah
    doc['message'].should == 'WTF'
    doc['spider'].should == 'TestMopedSpider'
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spidey-mongo-0.2.0 spec/spidey/strategies/moped_spec.rb