Sha256: 971dc7b50c275a169b58cd11e3cfb08246fd52d3e5f05d84156365af293e604b

Contents?: true

Size: 1.84 KB

Versions: 4

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

require "spec_helpers"

describe Wayfarer::Middleware::Dedup, redis: true do
  let(:task) { build(:task) }
  subject(:dedup) { Wayfarer::Middleware::Dedup.new }

  before { task.metadata.staged_urls = SortedSet.new }

  describe "#call" do
    context "without staged URLs" do
      it "does not raise" do
        expect { dedup.call(task) }.not_to raise_error
      end
    end

    context "with unseen URL" do
      it "marks the URL as seen" do
        expect {
          dedup.call(task)
        }.to change { task.barrier.seen?(task.url) }.to(true)
      end

      it "yields" do
        expect { |spy| dedup.call(task, &spy) }.to yield_control
      end
    end

    context "with seen URL" do
      before { task.barrier.seen?(task.url) }

      it "does not yield" do
        expect { |spy| dedup.call(task, &spy) }.not_to yield_control
      end
    end

    context "with exception raised" do
      it "does not mark the URL as seen" do
        begin
          dedup.call(task) { raise }
        rescue StandardError
          nil
        end
        expect(task.barrier.seen?(task.url)).to be(false)
      end

      it "re-raises the exception" do
        expect {
          dedup.call(task) { raise }
        }.to raise_error(RuntimeError)
      end
    end

    describe "staged URL filtering" do
      let(:seen_urls) { %w[https://yahoo.com https://google.com] }
      let(:unseen_urls) { %w[https://w3c.org https://nasa.gov] }

      before do
        seen_urls.each do |url|
          task.barrier.seen?(url)
        end

        [*seen_urls, *unseen_urls].each do |url|
          task.metadata.staged_urls.add(url)
        end
      end

      it "filters seen staged URLs" do
        expect {
          dedup.call(task)
        }.to change { task.metadata.staged_urls }.to(SortedSet.new(unseen_urls))
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
wayfarer-0.4.3 spec/middleware/dedup_spec.rb
wayfarer-0.4.2 spec/middleware/dedup_spec.rb
wayfarer-0.4.1 spec/middleware/dedup_spec.rb
wayfarer-0.4.0 spec/middleware/dedup_spec.rb