Sha256: 26027f7b55c998e0bd8f469dcf002a257c04e8b7ffdba4b81c3a08505b3de0af

Contents?: true

Size: 1.77 KB

Versions: 4

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Buildkite::TestCollector::TestLinksPlugin
  class Formatter
    RSpec::Core::Formatters.register self, :dump_failures

    def initialize(output)
      @output = output
    end

    def dump_failures(notification)
      # Do not display summary if no failed examples
      return if notification.failed_examples.empty?

      # Check if a Test Analytics token is set
      return unless Buildkite::TestCollector.api_token

      metadata = fetch_metadata

      # return if metadata was not fetched successfully
      return if metadata.nil?

      # return if suite url is nil
      return if metadata['suite_url'].nil?

      @output << "\n\nšŸ”„ \x1b[31mTest Analytics failures šŸ”„\n"
      @output << '_____________________________'
      @output << "\n\n"

      @output << notification.failed_examples.map do |example|
        failed_example_output(example, metadata['suite_url'])
      end.join("\n")

      @output << "\n\n"
    end

    private

    def generate_scope_name_digest(scope, name)
      Digest::SHA256.hexdigest(scope + name)
    end

    def failed_example_output(example, url)
      scope = example.example_group.metadata[:full_description]
      name = example.description
      scope_name_digest = generate_scope_name_digest(scope, name)
      test_url = "#{url}/tests/#{scope_name_digest}"
      "šŸ”— \x1b[4m\x1b[37m#{%(\x1b]1339;url=#{test_url};content="#{scope} #{name}"\x07)}\x1b[m"
    end

    def fetch_metadata
      return unless Buildkite::TestCollector.api_token

      http = Buildkite::TestCollector::HTTPClient.new(Buildkite::TestCollector.url)
      response = http.metadata

      JSON.parse(response.body) if response.code == '200'
    rescue StandardError => e
      # We don't need to output anything here
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
buildkite-test_collector-2.7.0 lib/buildkite/test_collector/test_links_plugin/formatter.rb
buildkite-test_collector-2.6.1 lib/buildkite/test_collector/test_links_plugin/formatter.rb
buildkite-test_collector-2.6.0 lib/buildkite/test_collector/test_links_plugin/formatter.rb
buildkite-test_collector-2.5.0 lib/buildkite/test_collector/test_links_plugin/formatter.rb