Class: GitlabQuality::TestTooling::TestResult::JsonTestResult
- Inherits:
-
BaseTestResult
- Object
- BaseTestResult
- GitlabQuality::TestTooling::TestResult::JsonTestResult
show all
- Defined in:
- lib/gitlab_quality/test_tooling/test_result/json_test_result.rb
Defined Under Namespace
Classes: TestLevelSpecification
Constant Summary
collapse
- PRIVATE_TOKEN_REGEX =
/(private_token=)[\w-]+/
- AUTHENTICATION_TOKEN_REGEX =
/("Authorization": \[\n\s*"token )([\w-]+)/
- OTHER_TESTS_MAX_DURATION =
45.40
- TEST_LEVEL_SPECIFICATIONS =
[
TestLevelSpecification.new(%r{spec/features/}, 50.13),
TestLevelSpecification.new(%r{spec/(controllers|requests)/}, 19.20),
TestLevelSpecification.new(%r{spec/lib/}, 27.12),
TestLevelSpecification.new(%r{qa/specs/features/}, 240)
].freeze
BaseTestResult::IGNORED_FAILURES, BaseTestResult::SHARED_EXAMPLES_CALLERS
Instance Attribute Summary
#report
Instance Method Summary
collapse
#calls_shared_examples?, #conditional_quarantine?, #failure_issue, #failure_issue=, #failures?, #feature_category, #feature_category?, #file, #file_base_url, #files_client, #full_stacktrace, #initialize, #level, #line_number, #product_group, #product_group?, #quarantine?, #run_time, #screenshot?, #stage, #test_file_link
Instance Method Details
#allowed_to_be_slow? ⇒ Boolean
121
122
123
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 121
def allowed_to_be_slow?
!!report['allowed_to_be_slow']
end
|
#category ⇒ Object
87
88
89
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 87
def category
report['category']
end
|
#ci_job_id ⇒ Object
95
96
97
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 95
def ci_job_id
report['ci_job_url'].split('/').last
end
|
#ci_job_url ⇒ Object
59
60
61
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 59
def ci_job_url
report.fetch('ci_job_url', '')
end
|
#example_id ⇒ Object
91
92
93
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 91
def example_id
report['id']
end
|
#failed? ⇒ Boolean
55
56
57
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 55
def failed?
status == 'failed'
end
|
#failures ⇒ Object
rubocop:disable Metrics/AbcSize
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 99
def failures @failures ||=
report.fetch('exceptions', []).filter_map do |exception|
backtrace = exception['backtrace']
next unless backtrace.respond_to?(:rindex)
spec_file_first_index = backtrace.rindex do |line|
line.include?(File.basename(report['file_path']))
end
message = redact_private_and_auth_tokens(exception['message'])
message_lines = Array(exception['message_lines']).map { |line| redact_private_and_auth_tokens(line) }
{
'message' => "#{exception['class']}: #{message}",
'message_lines' => message_lines,
'stacktrace' => "#{format_message_lines(message_lines)}\n#{backtrace.slice(0..spec_file_first_index).join("\n")}",
'correlation_id' => exception['correlation_id']
}
end
end
|
#max_duration_for_test ⇒ Object
129
130
131
132
133
134
135
136
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 129
def max_duration_for_test
test_level_specification = TEST_LEVEL_SPECIFICATIONS.find do |test_level_specification|
example_id =~ test_level_specification.regex
end
return OTHER_TESTS_MAX_DURATION unless test_level_specification
test_level_specification.max_duration
end
|
#name ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 21
def name
report.fetch('full_description').split('#<').first
end
|
#quarantine_issue ⇒ Object
75
76
77
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 75
def quarantine_issue
quarantine['issue'] if quarantine?
end
|
#quarantine_type ⇒ Object
71
72
73
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 71
def quarantine_type
quarantine['type'] if quarantine?
end
|
#relative_file ⇒ Object
43
44
45
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 43
def relative_file
report.fetch('file_path').delete_prefix('./')
end
|
#screenshot_image ⇒ Object
79
80
81
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 79
def screenshot_image
screenshot['image'] if screenshot?
end
|
#section ⇒ Object
83
84
85
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 83
def section
report['section']
end
|
#skipped? ⇒ Boolean
51
52
53
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 51
def skipped?
status == 'pending'
end
|
#slow_test? ⇒ Boolean
125
126
127
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 125
def slow_test?
!allowed_to_be_slow? && run_time > max_duration_for_test
end
|
#status ⇒ Object
47
48
49
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 47
def status
report.fetch('status')
end
|
#testcase ⇒ Object
63
64
65
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 63
def testcase
report.fetch('testcase', '')
end
|
#testcase=(new_testcase) ⇒ Object
67
68
69
|
# File 'lib/gitlab_quality/test_tooling/test_result/json_test_result.rb', line 67
def testcase=(new_testcase)
report['testcase'] = new_testcase
end
|