1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
require "flipper/poller"
RSpec.describe Flipper::Poller do
let(:remote_adapter) { Flipper::Adapters::Memory.new }
let(:remote) { Flipper.new(remote_adapter) }
let(:local) { Flipper.new(subject.adapter) }
subject do
described_class.new(
remote_adapter: remote_adapter,
start_automatically: false,
interval: Float::INFINITY
)
end
before do
allow(subject).to receive(:loop).and_yield # Make loop just call once
allow(subject).to receive(:sleep) # Disable sleep
allow(Thread).to receive(:new).and_yield # Disable separate thread
end
describe "#adapter" do
it "always returns same memory adapter instance" do
expect(subject.adapter).to be_a(Flipper::Adapters::Memory)
expect(subject.adapter.object_id).to eq(subject.adapter.object_id)
end
end
describe "#sync" do
it "syncs remote adapter to local adapter" do
remote.enable :polling
expect(local.enabled?(:polling)).to be(false)
subject.sync
expect(local.enabled?(:polling)).to be(true)
end
end
describe "#start" do
it "starts the poller thread" do
expect(Thread).to receive(:new).and_yield
expect(subject).to receive(:loop).and_yield
expect(subject).to receive(:sync)
subject.start
end
end
end
|