require 'spec_helper' RSpec.describe SmartPolling do describe "poll" do context "returning false" do let(:block) { -> { false } } it "raises SmartPolling::TimeoutError" do expect { SmartPolling.poll(timeout: 0.2, interval: 0.05, &block) }. to raise_error(SmartPolling::TimeoutError) end it "raises a custom error" do expect { SmartPolling.poll(timeout: 0.2, interval: 0.05, timeout_error: StandardError.new("custom_error"), &block) }. to raise_error(StandardError, "custom_error") end end context "returning true after some calls" do let(:block) do values = [false, false, "return_value", "another_return_value"] -> { values.shift } end it "returns the first non-false value" do expect(SmartPolling.poll(timeout: 0.2, interval: 0.05, &block)).to eq("return_value") end end context "returning some value" do let(:block) { -> { "return_value" } } it "returns the value" do expect(SmartPolling.poll(timeout: 0.2, interval: 0.05, &block)).to eq("return_value") end end end end