Sha256: 8ccc6c3db6fed1d86a6f35af01b394844725c28e945d4f612fe766371eb7dbde
Contents?: true
Size: 1.98 KB
Versions: 1
Compression:
Stored size: 1.98 KB
Contents
# frozen_string_literal: true require "spec_helpers" describe Wayfarer::Middleware::Fetch do let(:klass) { Class.new(Wayfarer::Base) } let(:job) { klass.new } let(:task) { build(:task) } let(:agent) { spy } subject(:fetch) { Wayfarer::Middleware::Fetch.new } before do task.job = job allow(fetch.pool).to receive(:with).and_yield(agent) end describe "#call" do it "assigns the task" do expect { fetch.call(task) }.to change { fetch.task }.to(task) end it "assigns the agent" do expect { fetch.call(task) }.to change { task.metadata.agent }.to(agent) end it "retrieves the page" do expect(agent).to receive(:fetch).with(task.url) fetch.call(task) end it "runs callbacks" do expect { |spy| klass.before_fetch(&spy) fetch.call(task) }.to yield_control end context "when encountering an HTTP redirect" do let(:redirect_url) { "https://redirect.com" } let(:result) do Wayfarer::Networking::Result::Redirect.new(redirect_url) end before do task.metadata.staged_urls = Set.new allow(agent).to receive(:fetch).with(task.url).and_return(result) end it "stages the redirect URL" do expect { fetch.call(task) }.to change { task.metadata.staged_urls }.to([redirect_url]) end it "does not yield" do expect { |spy| fetch.call(task, &spy) }.not_to yield_control end end context "when retrieval succeeds" do let(:page) { build(:page) } let(:result) { Wayfarer::Networking::Result::Success.new(page) } before do allow(agent).to receive(:fetch).with(task.url).and_return(result) end it "assigns the page" do expect { fetch.call(task) }.to change { task.metadata.page }.to(page) end it "yields" do expect { |spy| fetch.call(task, &spy) }.to yield_control end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wayfarer-0.4.1 | spec/middleware/fetch_spec.rb |