Class: RSpec::Core::Example

Inherits:
Object
  • Object
show all
Defined in:
lib/trunk_spec_helper.rb

Overview

Example is the class that represents a test case

Defined Under Namespace

Classes: Procsy

Instance Method Summary collapse

Instance Method Details

#assign_generated_descriptionObject



157
158
159
160
# File 'lib/trunk_spec_helper.rb', line 157

def assign_generated_description
  [:is_description_generated] = description_generated?
  assign_generated_description_core
end

#assign_generated_description_coreObject



104
# File 'lib/trunk_spec_helper.rb', line 104

alias assign_generated_description_core assign_generated_description

#description_generated?Boolean

Returns:

  • (Boolean)


162
163
164
165
166
# File 'lib/trunk_spec_helper.rb', line 162

def description_generated?
  return [:is_description_generated] unless [:is_description_generated].nil?

  description == location_description
end

#generate_trunk_idObject



168
169
170
# File 'lib/trunk_spec_helper.rb', line 168

def generate_trunk_id
  return "trunk:#{id}-#{location}" if description_generated?
end

#handle_quarantine_check(exception) ⇒ Object

trunk-ignore(rubocop/Metrics/AbcSize,rubocop/Metrics/MethodLength,rubocop/Metrics/CyclomaticComplexity)



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/trunk_spec_helper.rb', line 118

def handle_quarantine_check(exception)
  id = generate_trunk_id
  name = full_description
  parent_name = example_group.[:description]
  parent_name = parent_name.empty? ? 'rspec' : parent_name
  file = escape([:file_path])
  classname = file.sub(%r{\.[^/.]+\Z}, '').gsub('/', '.').gsub(/\A\.+|\.+\Z/, '')
  unless $failure_encountered_and_quarantining_disabled
    puts "Test failed, checking if it can be quarantined: `#{location}`".yellow
  end
  is_quarantined_result = $test_report.is_quarantined(id, name, parent_name, classname, file)

  if is_quarantined_result.quarantine_lookup_failed
    unless $failure_encountered_and_quarantine_lookup_failed
      puts 'Failed to check quarantining status, no failures will be quarantined'.yellow
      $failure_encountered_and_quarantine_lookup_failed = true
    end
    if quarantine_query_failure_exit?
      puts 'Quarantine lookup failed, exiting early'.red
      RSpec.world.wants_to_quit = true
    end
    set_exception_core(exception)
  elsif is_quarantined_result.quarantining_disabled_for_repo
    unless $failure_encountered_and_quarantining_disabled
      puts 'Quarantining is disabled for this repo, no failures will be quarantined'.yellow
      $failure_encountered_and_quarantining_disabled = true
    end
    set_exception_core(exception)
  elsif is_quarantined_result.test_is_quarantined
    # monitor the override in the metadata
    [:quarantined_exception] = exception
    puts "Test is quarantined, overriding exception: #{exception}".green
    nil
  else
    puts 'Test is not quarantined, continuing'.red
    set_exception_core(exception)
  end
end

#set_exception(exception) ⇒ Object

RSpec uses the existance of an exception to determine if the test failed We need to override this to allow us to capture the exception and then decide if we want to fail the test or not trunk-ignore(rubocop/Naming/AccessorMethodName)



109
110
111
112
113
114
115
# File 'lib/trunk_spec_helper.rb', line 109

def set_exception(exception)
  return set_exception_core(exception) if [:pending]
  return set_exception_core(exception) if trunk_disabled
  return set_exception_core(exception) if [:retry_attempts]&.positive?

  handle_quarantine_check(exception)
end

#set_exception_coreObject

keep the original method around so we can call it



103
# File 'lib/trunk_spec_helper.rb', line 103

alias set_exception_core set_exception