Class: Cucumber::Query

Inherits:
Object
  • Object
show all
Includes:
Messages::Helpers::TestStepResultComparator, Messages::Helpers::TimeConversion
Defined in:
lib/cucumber/query.rb

Instance Method Summary collapse

Constructor Details

#initialize(repository) ⇒ Query

Returns a new instance of Query.



19
20
21
# File 'lib/cucumber/query.rb', line 19

def initialize(repository)
  @repository = repository
end

Instance Method Details

#count_test_cases_startedObject

TODO: find****By methods (16/25) Complete

Missing: findSuggestionsBy (2 variants)
Missing: findUnambiguousStepDefinitionBy (1 variant)
Missing: findTestStepFinishedAndTestStepBy (1 variant)
Missing: findAttachmentsBy (2 variants)
Missing: findTestCaseDurationBy (2 variant)
REDUNDANT: findLineageBy (9 variants!)
REDUNDANT: findLocationOf (1 variant) - This strictly speaking isn't a findBy but is located within them
To Review: findMostSevereTestStepResultBy (2 variants)
To Review: findTestRunDuration (1 variant) - This strictly speaking isn't a findBy but is located within them


40
41
42
# File 'lib/cucumber/query.rb', line 40

def count_test_cases_started
  find_all_test_case_started.length
end

#find_all_pickle_stepsObject



48
49
50
# File 'lib/cucumber/query.rb', line 48

def find_all_pickle_steps
  repository.pickle_step_by_id.values
end

#find_all_picklesObject



44
45
46
# File 'lib/cucumber/query.rb', line 44

def find_all_pickles
  repository.pickle_by_id.values
end

#find_all_step_definitionsObject



52
53
54
# File 'lib/cucumber/query.rb', line 52

def find_all_step_definitions
  repository.step_definition_by_id.values
end

#find_all_test_case_finishedObject

This finds all test cases that have finished AND will not be retried



67
68
69
# File 'lib/cucumber/query.rb', line 67

def find_all_test_case_finished
  repository.test_case_finished_by_test_case_started_id.values.reject(&:will_be_retried)
end

#find_all_test_case_startedObject

This finds all test cases from the following conditions (UNION)

-> Test cases that have started, but not yet finished
-> Test cases that have started, finished, but that will NOT be retried


59
60
61
62
63
64
# File 'lib/cucumber/query.rb', line 59

def find_all_test_case_started
  repository.test_case_started_by_id.values.select do |test_case_started|
    test_case_finished = find_test_case_finished_by(test_case_started)
    test_case_finished.nil? || !test_case_finished.will_be_retried
  end
end

#find_all_test_casesObject



71
72
73
# File 'lib/cucumber/query.rb', line 71

def find_all_test_cases
  repository.test_case_by_id.values
end

#find_all_test_run_hook_finishedObject



79
80
81
# File 'lib/cucumber/query.rb', line 79

def find_all_test_run_hook_finished
  repository.test_run_hook_finished_by_test_run_hook_started_id.values
end

#find_all_test_run_hook_startedObject



75
76
77
# File 'lib/cucumber/query.rb', line 75

def find_all_test_run_hook_started
  repository.test_run_hook_started_by_id.values
end

#find_all_test_step_finishedObject



87
88
89
# File 'lib/cucumber/query.rb', line 87

def find_all_test_step_finished
  repository.test_steps_finished_by_test_case_started_id.values.flatten
end

#find_all_test_step_startedObject



83
84
85
# File 'lib/cucumber/query.rb', line 83

def find_all_test_step_started
  repository.test_steps_started_by_test_case_started_id.values.flatten
end

#find_all_test_stepsObject



91
92
93
# File 'lib/cucumber/query.rb', line 91

def find_all_test_steps
  repository.test_step_by_id.values
end

#find_hook_by(message) ⇒ Object

This method will be called with 1 of these 3 messages

[TestStep || TestRunHookStarted || TestRunHookFinished]


97
98
99
100
101
102
103
104
105
106
# File 'lib/cucumber/query.rb', line 97

def find_hook_by(message)
  ensure_only_message_types!(message, %i[test_step test_run_hook_started test_run_hook_finished], '#find_hook_by')

  if message.is_a?(Cucumber::Messages::TestRunHookFinished)
    test_run_hook_started_message = find_test_run_hook_started_by(message)
    test_run_hook_started_message ? find_hook_by(test_run_hook_started_message) : nil
  else
    repository.hook_by_id[message.hook_id]
  end
end

#find_metaObject



108
109
110
# File 'lib/cucumber/query.rb', line 108

def find_meta
  repository.meta
end

#find_most_severe_test_step_result_by(message) ⇒ Object

This method will be called with 1 of these 2 messages

[TestCaseStarted || TestCaseFinished]


114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/cucumber/query.rb', line 114

def find_most_severe_test_step_result_by(message)
  ensure_only_message_types!(message, %i[test_case_started test_case_finished], '#find_most_severe_test_step_result_by')

  if message.is_a?(Cucumber::Messages::TestCaseStarted)
    find_test_steps_finished_by(message)
      .map(&:test_step_result)
      .max_by { |test_step_result| test_step_result_rankings[test_step_result.status] }
    # Java code: "PREVIOUS".max(comparing(TestStepResult::getStatus, new TestStepResultStatusComparator()));
  else
    test_case_started_message = find_test_case_started_by(message)
    test_case_started_message && find_most_severe_test_step_result_by(test_case_started_message)
    # Java code: return findTestCaseStartedBy(testCaseFinished).flatMap(this::findMostSevereTestStepResultBy);
  end
end

#find_pickle_by(message) ⇒ Object

This method will be called with 1 of these 5 messages

[TestCase || TestCaseStarted || TestCaseFinished || TestStepStarted || TestStepFinished]


131
132
133
134
135
136
# File 'lib/cucumber/query.rb', line 131

def find_pickle_by(message)
  ensure_only_message_types!(message, %i[test_case test_case_started test_case_finished test_step_started test_step_finished], '#find_pickle_by')

  test_case_message = message.is_a?(Cucumber::Messages::TestCase) ? message : find_test_case_by(message)
  repository.pickle_by_id[test_case_message.pickle_id]
end

#find_pickle_step_by(test_step) ⇒ Object

This method will be called with only 1 message

[TestStep]


140
141
142
143
144
# File 'lib/cucumber/query.rb', line 140

def find_pickle_step_by(test_step)
  ensure_only_message_types!(test_step, %i[test_step], '#find_pickle_step_by')

  repository.pickle_step_by_id[test_step.pickle_step_id]
end

#find_step_by(pickle_step) ⇒ Object

This method will be called with only 1 message

[PickleStep]


148
149
150
151
152
# File 'lib/cucumber/query.rb', line 148

def find_step_by(pickle_step)
  ensure_only_message_types!(pickle_step, %i[pickle_step], '#find_step_by')

  repository.step_by_id[pickle_step.ast_node_ids.first]
end

#find_step_definitions_by(test_step) ⇒ Object

This method will be called with only 1 message

[TestStep]


156
157
158
159
160
161
# File 'lib/cucumber/query.rb', line 156

def find_step_definitions_by(test_step)
  ensure_only_message_types!(test_step, %i[test_step], '#find_step_definitions_by')

  ids = test_step.step_definition_ids.nil? ? [] : test_step.step_definition_ids
  ids.map { |id| repository.step_definition_by_id[id] }.compact
end

#find_test_case_by(message) ⇒ Object

This method will be called with 1 of these 4 messages

[TestCaseStarted || TestCaseFinished || TestStepStarted || TestStepFinished]


165
166
167
168
169
170
# File 'lib/cucumber/query.rb', line 165

def find_test_case_by(message)
  ensure_only_message_types!(message, %i[test_case_started test_case_finished test_step_started test_step_finished], '#find_test_case_by')

  test_case_started_message = message.is_a?(Cucumber::Messages::TestCaseStarted) ? message : find_test_case_started_by(message)
  repository.test_case_by_id[test_case_started_message.test_case_id]
end

#find_test_case_finished_by(test_case_started) ⇒ Object

This method will be called with only 1 message

[TestCaseStarted]


182
183
184
185
186
# File 'lib/cucumber/query.rb', line 182

def find_test_case_finished_by(test_case_started)
  ensure_only_message_types!(test_case_started, %i[test_case_started], '#find_test_case_finished_by')

  repository.test_case_finished_by_test_case_started_id[test_case_started.id]
end

#find_test_case_started_by(message) ⇒ Object

This method will be called with 1 of these 3 messages

[TestCaseFinished || TestStepStarted || TestStepFinished]


174
175
176
177
178
# File 'lib/cucumber/query.rb', line 174

def find_test_case_started_by(message)
  ensure_only_message_types!(message, %i[test_case_finished test_step_started test_step_finished], '#find_test_case_started_by')

  repository.test_case_started_by_id[message.test_case_started_id]
end

#find_test_run_durationObject



188
189
190
191
192
193
194
# File 'lib/cucumber/query.rb', line 188

def find_test_run_duration
  if repository.test_run_started.nil? || repository.test_run_finished.nil?
    nil
  else
    timestamp_to_time(repository.test_run_finished.timestamp) - timestamp_to_time(repository.test_run_started.timestamp)
  end
end

#find_test_run_finishedObject



216
217
218
# File 'lib/cucumber/query.rb', line 216

def find_test_run_finished
  repository.test_run_finished
end

#find_test_run_hook_finished_by(test_run_hook_started) ⇒ Object

This method will be called with only 1 message

[TestRunHookStarted]


206
207
208
209
210
# File 'lib/cucumber/query.rb', line 206

def find_test_run_hook_finished_by(test_run_hook_started)
  ensure_only_message_types!(test_run_hook_started, %i[test_run_hook_started], '#find_test_run_hook_finished_by')

  repository.test_run_hook_finished_by_test_run_hook_started_id[test_run_hook_started.id]
end

#find_test_run_hook_started_by(test_run_hook_finished) ⇒ Object

This method will be called with only 1 message

[TestRunHookFinished]


198
199
200
201
202
# File 'lib/cucumber/query.rb', line 198

def find_test_run_hook_started_by(test_run_hook_finished)
  ensure_only_message_types!(test_run_hook_finished, %i[test_run_hook_finished], '#find_test_run_hook_started_by')

  repository.test_run_hook_started_by_id[test_run_hook_finished.test_run_hook_started_id]
end

#find_test_run_startedObject



212
213
214
# File 'lib/cucumber/query.rb', line 212

def find_test_run_started
  repository.test_run_started
end

#find_test_step_by(message) ⇒ Object

This method will be called with 1 of these 2 messages

[TestStepStarted || TestStepFinished]


222
223
224
225
226
# File 'lib/cucumber/query.rb', line 222

def find_test_step_by(message)
  ensure_only_message_types!(message, %i[test_case_started test_case_finished], '#find_test_step_by')

  repository.test_step_by_id[message.test_step_id]
end

#find_test_steps_finished_by(message) ⇒ Object

This method will be called with 1 of these 2 messages

[TestCaseStarted || TestCaseFinished]


239
240
241
242
243
244
245
246
247
248
# File 'lib/cucumber/query.rb', line 239

def find_test_steps_finished_by(message)
  ensure_only_message_types!(message, %i[test_case_started test_case_finished], '#find_test_steps_finished_by')

  if message.is_a?(Cucumber::Messages::TestCaseStarted)
    repository.test_steps_finished_by_test_case_started_id.fetch(message.id, [])
  else
    test_case_started_message = find_test_case_started_by(message)
    test_case_started_message.nil? ? [] : find_test_steps_finished_by(test_case_started_message)
  end
end

#find_test_steps_started_by(message) ⇒ Object

This method will be called with 1 of these 2 messages

[TestCaseStarted || TestCaseFinished]


230
231
232
233
234
235
# File 'lib/cucumber/query.rb', line 230

def find_test_steps_started_by(message)
  ensure_only_message_types!(message, %i[test_case_started test_case_finished], '#find_test_steps_started_by')

  key = message.is_a?(Cucumber::Messages::TestCaseStarted) ? message.id : message.test_case_started_id
  repository.test_steps_started_by_test_case_started_id.fetch(key, [])
end