# frozen_string_literal: true require "spec_helpers" describe Wayfarer::Middleware::Worker do let(:task) { build(:task) } before { task.metadata.action = :index } let(:job) do Class.new(Wayfarer::Base) do def index :foobar end end end describe "::route" do it "returns a route" do expect(job.route).to be_a(Wayfarer::Routing::Route) end end describe "#call" do it "assigns the task" do worker = job.new expect { worker.call(task) }.to change { worker.task }.to(task) end it "calls the action method" do worker = job.new expect(worker).to receive(:index) worker.call(task) end it "yields" do expect { |spy| job.new.call(task, &spy) }.to yield_control end end describe "#chain" do it "returns its middleware chain" do worker = job.new expect(worker.chain.middlewares).to eq([*Wayfarer.core_middleware, worker]) end end describe "#redis" do it "yields a Redis connection" do job.new.redis do |conn| expect(conn).to be_a(Redis) end end end describe "#page" do let(:page) { Object.new } let(:worker) { job.new } before do task.metadata.page = page worker.task = task end it "returns the page" do expect(worker.page).to be(page) end context "with live keyword" do let(:adapter) { spy } let(:body) { "foobar" } let(:live) { Object.new } before do task.metadata.adapter = adapter allow(adapter).to receive(:live).with(page).and_return(live) end it "returns a live page" do expect(worker.page(live: true)).to be(live) end it "replaces the existing page" do expect { worker.page(live: true) }.to change { task.metadata.page }.to(live) end end end end