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`",
"<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.
26
27
28
29
30
31
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 26
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.
24
25
26
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 24
def report
@report
end
|
Instance Method Details
#calls_shared_examples? ⇒ Boolean
153
154
155
156
157
158
159
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 153
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
49
50
51
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 49
def category
raise NotImplementedError
end
|
#conditional_quarantine? ⇒ Boolean
112
113
114
115
116
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 112
def conditional_quarantine?
return true if quarantine? && quarantine.is_a?(Hash) && quarantine.has_key?('only')
false
end
|
#failure_issue ⇒ Object
81
82
83
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 81
def failure_issue
report['failure_issue']
end
|
#failure_issue=(new_failure_issue) ⇒ Object
85
86
87
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 85
def failure_issue=(new_failure_issue)
report['failure_issue'] = new_failure_issue
end
|
#failures ⇒ Object
57
58
59
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 57
def failures
raise NotImplementedError
end
|
#failures? ⇒ Boolean
69
70
71
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 69
def failures?
failures.any?
end
|
#feature_category ⇒ Object
65
66
67
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 65
def feature_category
report['feature_category']
end
|
#feature_category? ⇒ Boolean
77
78
79
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 77
def feature_category?
feature_category && !feature_category.empty?
end
|
#file ⇒ Object
118
119
120
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 118
def file
@file ||= relative_file.start_with?('qa/') ? "qa/#{relative_file}" : relative_file
end
|
#file_base_url ⇒ Object
122
123
124
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 122
def file_base_url
@file_base_url ||= "https://gitlab.com/#{mapped_project}/-/blob/#{ref}/"
end
|
#files_client ⇒ Object
161
162
163
164
165
166
167
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 161
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 130
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
93
94
95
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 93
def level
report['level']
end
|
#line_number ⇒ Object
89
90
91
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 89
def line_number
report['line_number']
end
|
#name ⇒ Object
37
38
39
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 37
def name
raise NotImplementedError
end
|
#product_group ⇒ Object
61
62
63
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 61
def product_group
report['product_group'].to_s
end
|
#product_group? ⇒ Boolean
73
74
75
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 73
def product_group?
product_group != ''
end
|
#quarantine? ⇒ Boolean
105
106
107
108
109
110
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 105
def quarantine?
!!quarantine
end
|
#relative_file ⇒ Object
41
42
43
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 41
def relative_file
raise NotImplementedError
end
|
#run_time ⇒ Object
97
98
99
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 97
def run_time
report['run_time'].to_f.round(2)
end
|
#screenshot? ⇒ Boolean
101
102
103
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 101
def screenshot?
!!screenshot
end
|
#section ⇒ Object
45
46
47
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 45
def section
raise NotImplementedError
end
|
#skipped? ⇒ Boolean
53
54
55
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 53
def skipped?
raise NotImplementedError
end
|
#stage ⇒ Object
33
34
35
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 33
def stage
@stage ||= file[%r{(?:api|browser_ui)/(?:(?:\d+_)?(\w+))}, 1] || category
end
|
#test_file_link ⇒ Object
126
127
128
|
# File 'lib/gitlab_quality/test_tooling/test_result/base_test_result.rb', line 126
def test_file_link
"[`#{file}#L#{line_number}`](#{file_base_url}#{file}#L#{line_number})"
end
|