diff options
Diffstat (limited to 'spec/lib/gitlab/loop_helpers_spec.rb')
-rw-r--r-- | spec/lib/gitlab/loop_helpers_spec.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/spec/lib/gitlab/loop_helpers_spec.rb b/spec/lib/gitlab/loop_helpers_spec.rb new file mode 100644 index 00000000000..e17a0342d64 --- /dev/null +++ b/spec/lib/gitlab/loop_helpers_spec.rb @@ -0,0 +1,45 @@ +require 'spec_helper' + +describe Gitlab::LoopHelpers do + let(:class_instance) { (Class.new { include ::Gitlab::LoopHelpers }).new } + + describe '#loop_until' do + subject do + class_instance.loop_until(**params) { true } + end + + context 'when limit is not given' do + let(:params) { { limit: nil } } + + it 'raises an error' do + expect { subject }.to raise_error(ArgumentError) + end + end + + context 'when timeout is specified' do + let(:params) { { timeout: 1.second } } + + it "returns false after it's expired" do + is_expected.to be_falsy + end + + it 'executes the block at least once' do + expect { |b| class_instance.loop_until(**params, &b) } + .to yield_control.at_least(1) + end + end + + context 'when iteration limit is specified' do + let(:params) { { limit: 1 } } + + it "returns false after it's expired" do + is_expected.to be_falsy + end + + it 'executes the block once' do + expect { |b| class_instance.loop_until(**params, &b) } + .to yield_control.once + end + end + end +end |