From bec31b2b243b7a0d8431d44cf13369c814885d07 Mon Sep 17 00:00:00 2001 From: Andreas Haller Date: Tue, 25 Mar 2025 13:49:18 +0100 Subject: [PATCH] Coverage value includes fractional digits --- CHANGELOG.md | 2 ++ lib/openapi_first/test.rb | 13 +++++++++++-- lib/openapi_first/test/coverage/plan.rb | 2 +- spec/test/coverage/plan_spec.rb | 2 +- spec/test_spec.rb | 6 +++--- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 612d94b9..bda05ed2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- OpenapiFirst::Test.report_coverage now includes fractional digits when returning a coverage value to avoid reporting "0% / no requests made" even though some requests have been made. + ## 2.4.0 - Support less verbose test setup without the need to call `OpenapiFirst::Test.report_coverage`, which will be called `at_exit`: diff --git a/lib/openapi_first/test.rb b/lib/openapi_first/test.rb index e6fc106d..49b96338 100644 --- a/lib/openapi_first/test.rb +++ b/lib/openapi_first/test.rb @@ -16,6 +16,8 @@ def self.minitest?(base) class Setup def initialize @minimum_coverage = 0 + @coverage_formatter = Coverage::TerminalFormatter + @coverage_formatter_options = {} yield self end @@ -23,14 +25,21 @@ def register(*) Test.register(*) end - attr_accessor :minimum_coverage + def skip_response_coverage_for_status(*statuses); end + + attr_accessor :minimum_coverage, :coverage_formatter_options, :coverage_formatter # This called at_exit def handle_exit coverage = Coverage.result.coverage # :nocov: puts 'API Coverage did not detect any API requests for the registered API descriptions' if coverage.zero? - Test.report_coverage if coverage.positive? + if coverage.positive? + Test.report_coverage( + formatter: coverage_formatter, + **coverage_formatter_options + ) + end return unless minimum_coverage > coverage puts "API Coverage fails with exit 2, because API coverage of #{coverage}%" \ diff --git a/lib/openapi_first/test/coverage/plan.rb b/lib/openapi_first/test/coverage/plan.rb index 34fd537c..8507ec0d 100644 --- a/lib/openapi_first/test/coverage/plan.rb +++ b/lib/openapi_first/test/coverage/plan.rb @@ -45,7 +45,7 @@ def coverage return 0 if done.zero? all = tasks.count - (done / (all.to_f / 100)).to_i + (done / (all.to_f / 100)) end def tasks diff --git a/spec/test/coverage/plan_spec.rb b/spec/test/coverage/plan_spec.rb index 20d9fe49..bd48e1ee 100644 --- a/spec/test/coverage/plan_spec.rb +++ b/spec/test/coverage/plan_spec.rb @@ -104,7 +104,7 @@ plan.track_request(valid_request) plan.track_response(valid_response) - expect(plan.coverage).to eq(66) + expect(plan.coverage).to eq(66.66666666666667) plan.track_response(valid_400_response) expect(plan.coverage).to eq(100) diff --git a/spec/test_spec.rb b/spec/test_spec.rb index 0c59782d..c9c59c56 100644 --- a/spec/test_spec.rb +++ b/spec/test_spec.rb @@ -82,7 +82,7 @@ # Response not tracked described_class.report_coverage - expect(output.string).to include('The overal API validation coverage of this run is: 50%') + expect(output.string).to include('The overal API validation coverage of this run is: 50.0%') end it 'reports 100% if all requests/responses have been tracked' do @@ -95,7 +95,7 @@ definition.validate_response(valid_request, response, raise_error: true) described_class.report_coverage - expect(output.string).to include('The overal API validation coverage of this run is: 100%') + expect(output.string).to include('The overal API validation coverage of this run is: 100.0%') end context 'when passing verbose: true' do @@ -113,7 +113,7 @@ expected_output = [ '✓ POST /roll', ' ✓ 200(application/json)', - 'The overal API validation coverage of this run is: 100%' + 'The overal API validation coverage of this run is: 100.0%' ] expect(output.string).to include(*expected_output) end