Sha256: 83e6a2916baa6f6e0db2b9def5044d3d43535324f2fe181d78ea7b203b620655

Contents?: true

Size: 1017 Bytes

Versions: 2

Compression:

Stored size: 1017 Bytes

Contents

require "helper"
require "flipper/adapters/sync/interval_synchronizer"

RSpec.describe Flipper::Adapters::Sync::IntervalSynchronizer do
  let(:events) { [] }
  let(:synchronizer) { -> { events << described_class.now_ms } }
  let(:interval) { 10 }

  subject { described_class.new(synchronizer, interval: interval) }

  it 'synchronizes on first call' do
    expect(events.size).to be(0)
    subject.call
    expect(events.size).to be(1)
  end

  it "only invokes wrapped synchronizer every interval seconds" do
    now = described_class.now_ms
    subject.call
    events.clear

    # move time to one millisecond less than last sync + interval
    1.upto(interval) do |i|
      allow(described_class).to receive(:now_ms).and_return(now + (i * 1_000) - 1)
      subject.call
    end
    expect(events.size).to be(0)

    # move time to last sync + interval in milliseconds
    allow(described_class).to receive(:now_ms).and_return(now + (interval * 1_000))
    subject.call
    expect(events.size).to be(1)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
flipper-0.15.0 spec/flipper/adapters/sync/interval_synchronizer_spec.rb
flipper-0.14.0 spec/flipper/adapters/sync/interval_synchronizer_spec.rb