Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'qa/spec/support/matchers/eventually_matcher.rb')
-rw-r--r--qa/spec/support/matchers/eventually_matcher.rb133
1 files changed, 0 insertions, 133 deletions
diff --git a/qa/spec/support/matchers/eventually_matcher.rb b/qa/spec/support/matchers/eventually_matcher.rb
deleted file mode 100644
index 7a35a3165ae..00000000000
--- a/qa/spec/support/matchers/eventually_matcher.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-# frozen_string_literal: true
-
-# Rspec matcher with build in retry logic
-#
-# USAGE:
-#
-# Basic
-# expect { Something.that.takes.time.to_appear }.to eventually_eq(expected_result)
-# expect { Something.that.takes.time.to_appear }.not_to eventually_eq(expected_result)
-#
-# With duration and attempts override
-# expect { Something.that.takes.time.to_appear }.to eventually_eq(expected_result).within(max_duration: 10, max_attempts: 5)
-
-module Matchers
- %w[
- eq
- be
- include
- be_truthy
- be_falsey
- be_empty
- ].each do |op|
- RSpec::Matchers.define(:"eventually_#{op}") do |*expected|
- chain(:within) do |kwargs = {}|
- @retry_args = kwargs
- @retry_args[:sleep_interval] = 0.5 unless @retry_args[:sleep_interval]
- end
-
- def supports_block_expectations?
- true
- end
-
- match { |actual| wait_and_check(actual, :default_expectation) }
-
- match_when_negated { |actual| wait_and_check(actual, :when_negated_expectation) }
-
- description do
- "eventually #{operator_msg} #{expected.inspect}"
- end
-
- failure_message do
- "#{e}:\nexpected to #{description}, last attempt was #{@result.nil? ? 'nil' : @result}"
- end
-
- failure_message_when_negated do
- "#{e}:\nexpected not to #{description}, last attempt was #{@result.nil? ? 'nil' : @result}"
- end
-
- # Execute rspec expectation within retrier
- #
- # @param [Proc] actual
- # @param [Symbol] expectation_name
- # @return [Boolean]
- def wait_and_check(actual, expectation_name)
- attempt = 0
-
- QA::Runtime::Logger.debug("Running eventually matcher with '#{operator_msg}' operator")
- QA::Support::Retrier.retry_until(**@retry_args) do
- QA::Runtime::Logger.debug("evaluating expectation, attempt: #{attempt += 1}")
-
- public_send(expectation_name, actual)
- rescue RSpec::Expectations::ExpectationNotMetError, QA::Resource::ApiFabricator::ResourceNotFoundError
- false
- end
- rescue QA::Support::Repeater::RetriesExceededError, QA::Support::Repeater::WaitExceededError => e
- @e = e
- false
- end
-
- # Execute rspec expectation
- #
- # @param [Proc] actual
- # @return [void]
- def default_expectation(actual)
- expect(result(&actual)).to public_send(*expectation_args)
- end
-
- # Execute negated rspec expectation
- #
- # @param [Proc] actual
- # @return [void]
- def when_negated_expectation(actual)
- expect(result(&actual)).not_to public_send(*expectation_args)
- end
-
- # Result of actual block
- #
- # @return [Object]
- def result
- @result = yield
- end
-
- # Error message placeholder to indicate waiter did not fail properly
- # This message should not appear under normal circumstances since it should
- # always be assigned from repeater
- #
- # @return [String]
- def e
- @e ||= 'Waiter did not fail!'
- end
-
- # Operator message
- #
- # @return [String]
- def operator_msg
- case operator
- when 'eq' then 'equal'
- else operator
- end
- end
-
- # Expect operator
- #
- # @return [String]
- def operator
- @operator ||= name.to_s.match(/eventually_(.+?)$/).to_a[1].to_s
- end
-
- # Expectation args
- #
- # @return [String, Array]
- def expectation_args
- if operator.include?('truthy') || operator.include?('falsey') || operator.include?('empty')
- operator
- elsif operator == "include" && expected.is_a?(Array)
- [operator, *expected]
- else
- [operator, expected]
- end
- end
- end
- end
-end