Sha256: 48c2ca2165cb0b8117f25afbd87a2828ebf92e49221c95542661a2376bdc35bf

Contents?: true

Size: 1.51 KB

Versions: 6

Compression:

Stored size: 1.51 KB

Contents

require 'spec_helper'

class WaitForModel < Sample::Model
  identity :id

  attribute :name
end

class WaitForModels < Sample::Collection
  model WaitForModel

  def get(_identity)
    self
  end
end

describe 'Cistern#wait_for' do
  it 'should return false if timeout exceeded' do
    expect(Cistern.wait_for(0, 0) { false }).to be_falsey
  end
end

describe 'Cistern#wait_for!' do
  it 'should raise if timeout exceeded' do
    expect { Cistern.wait_for!(0, 0) { false } }.to raise_exception(Cistern::Timeout)
  end
end

describe 'Cistern::Model#wait_for!' do
  let(:service) { Sample.new }
  let(:model)   { service.wait_for_models.new(identity: 1) }

  it 'should raise if timeout exceeded' do
    expect { model.wait_for!(0, 0) { false } }.to raise_exception(Sample::Timeout)
  end
end

describe 'WaitForModel#timeout' do
  let(:service) { Sample.new }
  let(:model)   { service.wait_for_models.new(identity: 1) }

  it 'should use service-specific timeout in #wait_for' do
    service.class.timeout = 0.1
    service.class.poll_interval = 0

    elapsed = 0

    Timeout.timeout(2) do
      expect do
        model.wait_for! { sleep(0.2); elapsed += 0.2; elapsed > 0.2 }
      end.to raise_exception(Sample::Timeout)
    end
  end

  it 'should favor explicit timeout' do
    service.class.timeout = 1
    service.class.poll_interval = 0

    elapsed = 0

    Timeout.timeout(2) do
      expect do
        model.wait_for!(0.1) { sleep(0.2); elapsed += 0.2; elapsed > 0.2 }
      end.to raise_exception(Sample::Timeout)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cistern-2.4.1 spec/wait_for_spec.rb
cistern-2.4.0 spec/wait_for_spec.rb
cistern-2.3.0 spec/wait_for_spec.rb
cistern-2.2.7 spec/wait_for_spec.rb
cistern-2.2.6 spec/wait_for_spec.rb
cistern-2.2.5 spec/wait_for_spec.rb