diff --git a/lib/datadog/ci/itr/runner.rb b/lib/datadog/ci/itr/runner.rb index 5cb57dc1..85d23bf6 100644 --- a/lib/datadog/ci/itr/runner.rb +++ b/lib/datadog/ci/itr/runner.rb @@ -7,6 +7,8 @@ require_relative "../git/local_repository" +require_relative "../utils/parsing" + require_relative "coverage/event" module Datadog @@ -32,13 +34,13 @@ def initialize( def configure(remote_configuration, test_session) Datadog.logger.debug("Configuring ITR Runner with remote configuration: #{remote_configuration}") - @enabled = convert_to_bool( + @enabled = Utils::Parsing.convert_to_bool( remote_configuration.fetch(Ext::Transport::DD_API_SETTINGS_RESPONSE_ITR_ENABLED_KEY, false) ) - @test_skipping_enabled = @enabled && convert_to_bool( + @test_skipping_enabled = @enabled && Utils::Parsing.convert_to_bool( remote_configuration.fetch(Ext::Transport::DD_API_SETTINGS_RESPONSE_TESTS_SKIPPING_KEY, false) ) - @code_coverage_enabled = @enabled && convert_to_bool( + @code_coverage_enabled = @enabled && Utils::Parsing.convert_to_bool( remote_configuration.fetch(Ext::Transport::DD_API_SETTINGS_RESPONSE_CODE_COVERAGE_KEY, false) ) @@ -121,10 +123,6 @@ def load_datadog_cov! @code_coverage_enabled = false end - def convert_to_bool(value) - value.to_s == "true" - end - def ensure_test_source_covered(test_source_file, coverage) absolute_test_source_file_path = File.join(Git::LocalRepository.root, test_source_file) return if coverage.key?(absolute_test_source_file_path) diff --git a/lib/datadog/ci/transport/remote_settings_api.rb b/lib/datadog/ci/transport/remote_settings_api.rb index 634339ca..d3ab46ad 100644 --- a/lib/datadog/ci/transport/remote_settings_api.rb +++ b/lib/datadog/ci/transport/remote_settings_api.rb @@ -5,6 +5,7 @@ require "datadog/core/environment/identity" require_relative "../ext/transport" +require_relative "../utils/parsing" module Datadog module CI @@ -39,6 +40,10 @@ def payload end end + def require_git? + Utils::Parsing.convert_to_bool(payload[Ext::Transport::DD_API_SETTINGS_RESPONSE_REQUIRE_GIT_KEY]) + end + private def default_payload diff --git a/lib/datadog/ci/utils/parsing.rb b/lib/datadog/ci/utils/parsing.rb new file mode 100644 index 00000000..e519935e --- /dev/null +++ b/lib/datadog/ci/utils/parsing.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require "open3" +require "pathname" + +module Datadog + module CI + module Utils + module Parsing + def self.convert_to_bool(value) + value.to_s.downcase == "true" + end + end + end + end +end diff --git a/sig/datadog/ci/itr/runner.rbs b/sig/datadog/ci/itr/runner.rbs index 4950212e..1e4f8b53 100644 --- a/sig/datadog/ci/itr/runner.rbs +++ b/sig/datadog/ci/itr/runner.rbs @@ -28,8 +28,6 @@ module Datadog def coverage_collector: () -> Datadog::CI::ITR::Coverage::DDCov? - def convert_to_bool: (untyped value) -> bool - def load_datadog_cov!: () -> void def write: (Datadog::CI::ITR::Coverage::Event event) -> void diff --git a/sig/datadog/ci/transport/remote_settings_api.rbs b/sig/datadog/ci/transport/remote_settings_api.rbs index cbf422a3..15086cc4 100644 --- a/sig/datadog/ci/transport/remote_settings_api.rbs +++ b/sig/datadog/ci/transport/remote_settings_api.rbs @@ -12,6 +12,8 @@ module Datadog def payload: () -> Hash[String, untyped] + def require_git?: () -> bool + private def default_payload: () -> Hash[String, untyped] diff --git a/sig/datadog/ci/utils/parsing.rbs b/sig/datadog/ci/utils/parsing.rbs new file mode 100644 index 00000000..93b33aca --- /dev/null +++ b/sig/datadog/ci/utils/parsing.rbs @@ -0,0 +1,9 @@ +module Datadog + module CI + module Utils + module Parsing + def self.convert_to_bool: (untyped value) -> bool + end + end + end +end diff --git a/spec/datadog/ci/transport/remote_settings_api_spec.rb b/spec/datadog/ci/transport/remote_settings_api_spec.rb index faf31eaf..e11cdbf6 100644 --- a/spec/datadog/ci/transport/remote_settings_api_spec.rb +++ b/spec/datadog/ci/transport/remote_settings_api_spec.rb @@ -73,12 +73,13 @@ "code_coverage" => true, "tests_skipping" => false, "itr_enabled" => true, - "require_git" => false + "require_git" => require_git } } }.to_json ) end + let(:require_git) { false } it "parses the response" do expect(response.ok?).to be true @@ -86,8 +87,17 @@ "code_coverage" => true, "tests_skipping" => false, "itr_enabled" => true, - "require_git" => false + "require_git" => require_git }) + expect(response.require_git?).to be false + end + + context "when git is required" do + let(:require_git) { "True" } + + it "parses the response" do + expect(response.require_git?).to be true + end end end @@ -103,6 +113,7 @@ it "parses the response" do expect(response.ok?).to be false expect(response.payload).to eq("itr_enabled" => false) + expect(response.require_git?).to be false end end @@ -122,6 +133,7 @@ it "parses the response" do expect(response.ok?).to be true expect(response.payload).to eq("itr_enabled" => false) + expect(response.require_git?).to be false end end @@ -144,6 +156,7 @@ it "parses the response" do expect(response.ok?).to be true expect(response.payload).to eq("itr_enabled" => false) + expect(response.require_git?).to be false end end end @@ -154,6 +167,7 @@ it "returns an empty response" do expect(response.ok?).to be false expect(response.payload).to eq("itr_enabled" => false) + expect(response.require_git?).to be false end end end