Class: GitlabQuality::TestTooling::TestResult::BaseTestResult
- Inherits:
-
Object
- Object
- GitlabQuality::TestTooling::TestResult::BaseTestResult
show all
- Defined in:
- lib/gitlab_quality/test_tooling/test_result/base_test_result.rb
Constant Summary
collapse
- IGNORED_FAILURES =
[
"Net::ReadTimeout",
"403 Forbidden - Your account has been blocked",
"API failed (502) with `GitLab is not responding",
"Error Code: 502",
"unexpected token at 'GitLab is not responding'",
"GitLab: Internal API error (502).",
"could not be found (502)",
"Error reference number: 502",
"(502): `GitLab is not responding`",
"(502): `502 Bad Gateway`",
"<head><title>502 Bad Gateway</title></head>",
"14:connections to all backends failing",
"gitlab_canary=true cookie was set in browser but 'Next' badge was not shown on UI"
].freeze
- SHARED_EXAMPLES_CALLERS =
%w[include_examples it_behaves_like].freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(report:, token: '', project: Runtime::Env.ci_project_path, ref: Runtime::Env.ci_commit_ref_name) ⇒ BaseTestResult
Returns a new instance of BaseTestResult.
27
28
29
30
31
32
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 27
def initialize(report:, token: '', project: Runtime::Env.ci_project_path, ref: Runtime::Env.ci_commit_ref_name)
@report = report
@token = token
@project = project
@ref = ref
end
|
Instance Attribute Details
#report ⇒ Object
Returns the value of attribute report.
25
26
27
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 25
def report
@report
end
|
Instance Method Details
#calls_shared_examples? ⇒ Boolean
154
155
156
157
158
159
160
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 154
def calls_shared_examples?
reported_line = files_client.file_contents_at_line(line_number)
return false unless reported_line
SHARED_EXAMPLES_CALLERS.any? { |caller_method| reported_line.strip.start_with?(caller_method) }
end
|
#category ⇒ Object
50
51
52
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 50
def category
raise NotImplementedError
end
|
#conditional_quarantine? ⇒ Boolean
113
114
115
116
117
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 113
def conditional_quarantine?
return true if quarantine? && quarantine.is_a?(Hash) && quarantine.has_key?('only')
false
end
|
#failure_issue ⇒ Object
82
83
84
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 82
def failure_issue
report['failure_issue']
end
|
#failure_issue=(new_failure_issue) ⇒ Object
86
87
88
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 86
def failure_issue=(new_failure_issue)
report['failure_issue'] = new_failure_issue
end
|
#failures ⇒ Object
58
59
60
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 58
def failures
raise NotImplementedError
end
|
#failures? ⇒ Boolean
70
71
72
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 70
def failures?
failures.any?
end
|
#feature_category ⇒ Object
66
67
68
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 66
def feature_category
report['feature_category']
end
|
#feature_category? ⇒ Boolean
78
79
80
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 78
def feature_category?
feature_category && !feature_category.empty?
end
|
#file ⇒ Object
119
120
121
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 119
def file
@file ||= relative_file.start_with?('qa/') ? "qa/#{relative_file}" : relative_file
end
|
#file_base_url ⇒ Object
123
124
125
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 123
def file_base_url
@file_base_url ||= "https://gitlab.com/#{mapped_project}/-/blob/#{ref}/"
end
|
#files_client ⇒ Object
162
163
164
165
166
167
168
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 162
def files_client
@files_client ||= GitlabClient::RepositoryFilesClient.new(
token: token,
project: mapped_project,
file_path: file,
ref: ref.nil? || ref.empty? ? 'master' : ref)
end
|
#full_stacktrace ⇒ Object
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 131
def full_stacktrace
page_error_failure = ""
first_non_ignored_failure = ""
failures.each do |failure|
message = failure['message'] || ""
message_lines = failure['message_lines'] || []
next if IGNORED_FAILURES.any? { |e| message.include?(e) }
formatted_failure = message_lines.empty? ? message : message_lines.join("\n")
if message.include?("PageErrorChecker")
page_error_failure = formatted_failure
elsif first_non_ignored_failure.empty?
first_non_ignored_failure = formatted_failure
end
end
page_error_failure.empty? ? first_non_ignored_failure : page_error_failure
end
|
#level ⇒ Object
94
95
96
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 94
def level
report['level']
end
|
#line_number ⇒ Object
90
91
92
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 90
def line_number
report['line_number']
end
|
#name ⇒ Object
38
39
40
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 38
def name
raise NotImplementedError
end
|
#product_group ⇒ Object
62
63
64
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 62
def product_group
report['product_group'].to_s
end
|
#product_group? ⇒ Boolean
74
75
76
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 74
def product_group?
product_group != ''
end
|
#quarantine? ⇒ Boolean
106
107
108
109
110
111
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 106
def quarantine?
!!quarantine
end
|
#relative_file ⇒ Object
42
43
44
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 42
def relative_file
raise NotImplementedError
end
|
#run_time ⇒ Object
98
99
100
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 98
def run_time
report['run_time'].to_f.round(2)
end
|
#screenshot? ⇒ Boolean
102
103
104
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 102
def screenshot?
!!screenshot
end
|
#section ⇒ Object
46
47
48
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 46
def section
raise NotImplementedError
end
|
#skipped? ⇒ Boolean
54
55
56
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 54
def skipped?
raise NotImplementedError
end
|
#stage ⇒ Object
34
35
36
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 34
def stage
@stage ||= file[%r{(?:api|browser_ui)/(?:(?:\d+_)?(\w+))}, 1] || category
end
|
#test_file_link ⇒ Object
127
128
129
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 127
def test_file_link
"[`#{file}#L#{line_number}`](#{file_base_url}#{file}#L#{line_number})"
end
|