Sha256: 6ce7a7f093c1f74fe6ee78caa7d7b2e3fced246a57dd4b5f81dc3368cb7f2973

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

module RepoAnalyzer
  class TestsInfoExtractor < ProjectInfoExtractor
    TESTEABLE_RAILS_RESOURCES = %i{
      controllers
      mailers
      models
      jobs
      policies
      commands
      services
      observers
      values
      utils
      clients
    }

    EXCLUDED_FILES = %w{
      previews
      application_record
      application_controller
      base_controller
      application_job
      concern
      application_mailer
      application_policy
      default_policy
      admin_user_policy
      comment_policy
      page_policy
    }

    private

    def extracted_info
      {
        swagger_tests_count: swagger_tests,
        system_tests_count: system_tests_count,
        jest_tests_count: jest_tests_count,
        rails_code_coverage: rails_code_coverage.merge(total: coverage_total)
      }
    end

    def swagger_tests
      project_data_bridge.dir_files("spec/integration").count
    end

    def system_tests_count
      project_data_bridge.dir_files("spec/system").count
    end

    def jest_tests_count
      project_data_bridge.dir_files("app/javascript").count do |file|
        file.include?("spec.js")
      end
    end

    def rails_code_coverage
      TESTEABLE_RAILS_RESOURCES.inject({}) do |data, resource|
        tests_count = project_data_bridge.dir_files("spec/#{resource}").count do |file|
          valid_file?(file)
        end
        files_count = project_data_bridge.dir_files("app/#{resource}").count do |file|
          valid_file?(file)
        end
        data[resource] = { files_count: files_count, tests_count: tests_count }
        coverage_total[:files_count] += files_count
        coverage_total[:tests_count] += tests_count
        data
      end
    end

    def valid_file?(file)
      EXCLUDED_FILES.each do |key|
        return false if file.include?(key) || !file.ends_with?(".rb")
      end

      true
    end

    def coverage_total
      @coverage_total ||= {
        files_count: 0,
        tests_count: 0
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
repo_analyzer-1.0.0 app/extractors/repo_analyzer/tests_info_extractor.rb