module Gitlab::QA::Report::ResultsReporterShared
def find_issue(test)
def find_issue(test) issues = search_for_issues(test) warn(%(Too many #{issue_type}s found with the file path "#{test.file}" and name "#{test.name}")) if issues.many? puts "Found existing #{issue_type}: #{issues.first.web_url}" unless issues.empty? issues.first end
def find_issue_by_iid(iid)
def find_issue_by_iid(iid) issues = gitlab.find_issues(iid: iid) do |issue| issue.state == 'opened' && issue.issue_type == issue_type end warn(%(#{issue_type} iid "#{iid}" not valid)) if issues.empty? issues.first end
def issue_title_needs_updating?(issue, test)
def issue_title_needs_updating?(issue, test) issue.title.strip != title_from_test(test) && !%w[canary production preprod release].include?(pipeline) end
def new_issue_labels(test)
def new_issue_labels(test) ['Quality', "devops::#{test.stage}", 'status::automated'] end
def search_for_issues(test)
def search_for_issues(test) gitlab.find_issues(options: { search: search_term(test) }) do |issue| issue.state == 'opened' && issue.issue_type == issue_type && issue.title.strip == title_from_test(test) end end
def search_term(test)
def search_term(test) %("#{partial_file_path(test.file)}" "#{search_safe(test.name)}") end
def up_to_date_labels(test:, issue: nil, new_labels: Set.new)
def up_to_date_labels(test:, issue: nil, new_labels: Set.new) labels = super labels |= new_issue_labels(test).to_set labels.delete_if { |label| label.start_with?("#{pipeline}::") } labels << (test.failures.empty? ? "#{pipeline}::passed" : "#{pipeline}::failed") end
def update_issue_title(issue, test)
def update_issue_title(issue, test) warn(%(#{issue_type} title needs to be updated from '#{issue.title.strip}' to '#{title_from_test(test)}')) gitlab.edit_issue(iid: issue.iid, options: { title: title_from_test(test) }) end