andrcuns/allure-report-publisher

View on GitHub
lib/allure_report_publisher/lib/providers/_provider.rb

Summary

Maintainability
A
40 mins
Test Coverage
A
90%
module Publisher
  # Namespace for providers executing tests
  #
  module Providers
    # CI provider class
    #
    # @return [Publisher::Providers::Base]
    def self.provider
      return Github if ENV["GITHUB_WORKFLOW"]

      Gitlab if ENV["GITLAB_CI"]
    end

    # CI info class
    #
    # @return [Info::Base]
    def self.info
      return Info::Github.instance if ENV["GITHUB_WORKFLOW"]

      Info::Gitlab.instance if ENV["GITLAB_CI"]
    end

    # Base class for CI executor info
    #
    class Provider
      # CI provider base
      #
      # @param [Hash] args
      # @option args [String] :report_url
      # @option args [String] :report_path
      # @option args [Boolean] :update_pr
      # @option args [String] :summary_type
      # @option args [Symbol] :summary_table_type
      # @option args [Boolean] :collapse_summay
      # @option args [Boolean] :flaky_warning_status
      # @option args [Boolean] :unresolved_discussion_on_failure
      # @option args [String] :report_title
      def initialize(**args)
        @report_url = args[:report_url]
        @report_path = args[:report_path]
        @update_pr = args[:update_pr]
        @summary_type = args[:summary_type]
        @summary_table_type = args[:summary_table_type]
        @collapse_summary = args[:collapse_summary]
        @flaky_warning_status = args[:flaky_warning_status]
        @unresolved_discussion_on_failure = args[:unresolved_discussion_on_failure]
        @report_title = args[:report_title]
      end

      # Add report url to pull request description
      #
      # @return [void]
      def add_result_summary
        return add_comment if comment?

        update_pr_description
      end

      private

      attr_reader :report_url,
                  :report_path,
                  :update_pr,
                  :summary_type,
                  :collapse_summary,
                  :summary_table_type,
                  :flaky_warning_status,
                  :unresolved_discussion_on_failure,
                  :report_title

      # Current pull request description
      #
      # @return [String]
      def pr_description
        raise("Not implemented!")
      end

      # Update pull request description
      #
      # @return [void]
      def update_pr_description
        raise("Not implemented!")
      end

      # Add comment with report url
      #
      # @return [void]
      def add_comment
        raise("Not implemented!")
      end
      # :nocov:

      # Add report url as comment
      #
      # @return [Boolean]
      def comment?
        update_pr == "comment"
      end

      # Report urls section creator
      #
      # @return [ReportUrls]
      def url_section_builder
        @url_section_builder ||= Helpers::UrlSectionBuilder.new(
          report_url: report_url,
          report_path: report_path,
          build_name: build_name,
          sha_url: sha_url,
          summary_type: summary_type,
          summary_table_type: summary_table_type,
          collapse_summary: collapse_summary,
          flaky_warning_status: flaky_warning_status,
          report_title: report_title
        )
      end
    end
  end
end