class TestCentricity::ExceptionQueue

Attributes

active_ui_element[RW]
error_queue[RW]
mru_ui_element[RW]

Public Class Methods

enqueue_assert_equal(expected, actual, error_message) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 9
def self.enqueue_assert_equal(expected, actual, error_message)
  is_equal = if %i[edge safari].include?(Environ.browser) && expected.is_a?(String) && actual.is_a?(String)
               expected.downcase.strip == actual.downcase.strip
             else
               expected == actual
             end
  unless is_equal
    enqueue("#{error_message} to be\n  '#{expected}'\nbut found\n  '#{actual}'")
    enqueue_screenshot
  end
end
enqueue_assert_not_equal(expected, actual, error_message) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 21
def self.enqueue_assert_not_equal(expected, actual, error_message)
  unless expected != actual
    enqueue("#{error_message} to not be equal to '#{expected}'")
    enqueue_screenshot
  end
end
enqueue_comparison(ui_object, state, actual, error_msg) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 43
def self.enqueue_comparison(ui_object, state, actual, error_msg)
  @active_ui_element = ui_object
  if state.is_a?(Hash) && state.length == 1
    state.each do |key, value|
      case key
      when :lt, :less_than
        enqueue_exception("#{error_msg} be less than #{value} but found '#{actual}'") unless actual < value
      when :lt_eq, :less_than_or_equal
        enqueue_exception("#{error_msg} be less than or equal to #{value} but found '#{actual}'") unless actual <= value
      when :gt, :greater_than
        enqueue_exception("#{error_msg} be greater than #{value} but found '#{actual}'") unless actual > value
      when :gt_eq, :greater_than_or_equal
        enqueue_exception("#{error_msg} be greater than or equal to  #{value} but found '#{actual}'") unless actual >= value
      when :starts_with
        enqueue_exception("#{error_msg} start with '#{value}' but found '#{actual}'") unless actual.start_with?(value)
      when :ends_with
        enqueue_exception("#{error_msg} end with '#{value}' but found '#{actual}'") unless actual.end_with?(value)
      when :contains
        enqueue_exception("#{error_msg} contain '#{value}' but found '#{actual}'") unless actual.include?(value)
      when :not_contains, :does_not_contain
        enqueue_exception("#{error_msg} not contain '#{value}' but found '#{actual}'") if actual.include?(value)
      when :not_equal
        enqueue_exception("#{error_msg} not equal '#{value}' but found '#{actual}'") if actual == value
      when :like, :is_like
        actual_like = actual.delete("\n")
        actual_like = actual_like.delete("\r")
        actual_like = actual_like.delete("\t")
        actual_like = actual_like.delete(' ')
        actual_like = actual_like.downcase
        expected    = value.delete("\n")
        expected    = expected.delete("\r")
        expected    = expected.delete("\t")
        expected    = expected.delete(' ')
        expected    = expected.downcase
        enqueue_exception("#{error_msg} be like '#{value}' but found '#{actual}'") unless actual_like.include?(expected)
      when :translate
        expected = translate(value)
        enqueue_assert_equal(expected, actual, error_msg)
      when :translate_upcase
        expected = translate(value)
        expected = expected.is_a?(Array) ? expected.map(&:upcase) : expected.upcase
        enqueue_assert_equal(expected, actual, error_msg)
      when :translate_downcase
        expected = translate(value)
        expected = expected.is_a?(Array) ? expected.map(&:downcase) : expected.downcase
        enqueue_assert_equal(expected, actual, error_msg)
      when :translate_capitalize
        expected = translate(value)
        expected = expected.is_a?(Array) ? expected.map(&:capitalize) : expected.capitalize
        enqueue_assert_equal(expected, actual, error_msg)
      when :translate_titlecase
        expected = translate(value)
        expected = if expected.is_a?(Array)
                     result = []
                     expected.each do |item|
                       result.push("#{item.split.each{ |item| item.capitalize! }.join(' ')}")
                     end
                     result
                   else
                     "#{expected.split.each{ |expected| expected.capitalize! }.join(' ')}"
                   end
        enqueue_assert_equal(expected, actual, error_msg)
      end
    end
  else
    enqueue_assert_equal(state, actual, error_msg)
  end
end
enqueue_exception(error_message) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 28
def self.enqueue_exception(error_message)
  enqueue(error_message)
end
post_exceptions(preample_message = nil) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 32
def self.post_exceptions(preample_message = nil)
  unless @error_queue.nil?
    @error_queue = "#{preample_message} - The following errors were found:\n_______________________________\n#{@error_queue}" unless preample_message.nil?
    raise @error_queue
  end
ensure
  @error_queue = nil
  @active_ui_element = nil
  @mru_ui_element = nil
end

Private Class Methods

disable_enforce_available_locales() { || ... } click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 156
def self.disable_enforce_available_locales
  saved_enforce_available_locales = I18n.enforce_available_locales
  I18n.enforce_available_locales = false
  yield
ensure
  I18n.enforce_available_locales = saved_enforce_available_locales
end
enqueue(message) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 114
def self.enqueue(message)
  @error_queue = "#{@error_queue}#{message}\n\n"
end
enqueue_screenshot() click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 118
def self.enqueue_screenshot
  timestamp = Time.now.strftime('%Y%m%d%H%M%S')
  filename = "Screenshot-#{timestamp}"
  path = File.join Dir.pwd, 'reports/screenshots/', filename
  # highlight the active UI element prior to taking a screenshot
  unless @active_ui_element.nil? || @mru_ui_element == @active_ui_element
    @active_ui_element.highlight(0)
    @mru_ui_element = @active_ui_element
  end
  # take screenshot
  if Environ.driver == :appium
    AppiumConnect.take_screenshot("#{path}.png")
  else
    Capybara.save_screenshot "#{path}.png"
  end
  # unhighlight the active UI element
  @mru_ui_element.unhighlight unless @mru_ui_element.blank?
  # add screenshot to queue
  puts "Screenshot saved at #{path}.png"
  screen_shot = {path: path, filename: filename}
  Environ.save_screen_shot(screen_shot)
end
translate(*args, **opts) click to toggle source
# File lib/testcentricity_web/exception_queue_helper.rb, line 141
def self.translate(*args, **opts)
  opts[:locale] ||= I18n.locale
  opts[:raise] = true
  I18n.translate(*args, **opts)
rescue I18n::MissingTranslationData => err
  puts err
  opts[:locale] = :en

  # fallback to en if the translation is missing. If the translation isn't
  # in en, then raise again.
  disable_enforce_available_locales do
    I18n.translate(*args, **opts)
  end
end