From 3363c523ea583601e22ecf079cf0f82112abcfbb Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 29 Jul 2025 11:52:10 +1000 Subject: [PATCH 1/6] Check more code for coverage * ApplicationJob should be covered by tests. * Spec should all be executed, except `xit` which should be avoided and can be flagged. --- .simplecov | 2 -- 1 file changed, 2 deletions(-) diff --git a/.simplecov b/.simplecov index 66573a094d..3298884377 100755 --- a/.simplecov +++ b/.simplecov @@ -4,10 +4,8 @@ SimpleCov.start 'rails' do add_filter '/bin/' add_filter '/config/' - add_filter '/jobs/application_job.rb' add_filter '/schemas/' add_filter '/lib/generators' - add_filter '/spec/' add_filter '/vendor/' add_filter '/public' add_filter '/swagger' From 76a1fe7767f9e256a938a6bfa1d49e53f8bea81d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 31 Jul 2025 14:54:34 +1000 Subject: [PATCH 2/6] Ignore inaccurate coverage of rake tasks I tried several ways to get code coverage for rake tasks but I haven't succeeded yet. Somehow rake is confusing simplecov. --- .simplecov | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.simplecov b/.simplecov index 3298884377..dcfe2822f6 100755 --- a/.simplecov +++ b/.simplecov @@ -12,7 +12,9 @@ SimpleCov.start 'rails' do add_filter '/script' add_filter '/log' add_filter '/db' - add_filter '/lib/tasks/sample_data/' + + # We haven't managed to make simplecov recognise rake coverage accurately. + add_filter '/lib/tasks/' formatter SimpleCov::Formatter::SimpleFormatter end From 06867ff7eaffd4f01842deb791f1014de275cd38 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 29 Jul 2025 11:56:54 +1000 Subject: [PATCH 3/6] Remove unnecessary simplecov filters * /schemas doesn't exist. * /lib/generators doesn't exist. * /vendor doesn't contain rb files. * /public doesn't contain rb files. * /swagger doesn't contain rb files. * /log doens't contain rb files. --- .simplecov | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.simplecov b/.simplecov index dcfe2822f6..dd47f33e21 100755 --- a/.simplecov +++ b/.simplecov @@ -4,13 +4,7 @@ SimpleCov.start 'rails' do add_filter '/bin/' add_filter '/config/' - add_filter '/schemas/' - add_filter '/lib/generators' - add_filter '/vendor/' - add_filter '/public' - add_filter '/swagger' add_filter '/script' - add_filter '/log' add_filter '/db' # We haven't managed to make simplecov recognise rake coverage accurately. From d72bc494098a9f75f314e8a231958b7cfda4583e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 29 Jul 2025 12:09:59 +1000 Subject: [PATCH 4/6] Compare coverage to upstream master when on fork --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f4a97638a9..c6711bb01a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -410,6 +410,6 @@ jobs: include-hidden-files: true - name: Compare SimpleCov results with Undercover run: | - git fetch --no-tags origin master:master + git fetch --no-tags origin ${{ github.event.pull_request.base.ref }}:master bundle exec undercover if: ${{ github.ref != 'refs/heads/master' }} # Does not run on master, as we can't fetch master in the master branch From c0924fbe5ee53d85ff66264674a12e8c71b53529 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 30 Jul 2025 12:49:27 +1000 Subject: [PATCH 5/6] Use new Undercover formatter for :nocov: support --- .rubocop_styleguide.yml | 1 + .undercover | 3 +-- Gemfile | 2 -- Gemfile.lock | 3 --- lib/tasks/simplecov.rake | 5 ++--- spec/lib/tasks/simplecov_spec.rb | 4 ++++ 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.rubocop_styleguide.yml b/.rubocop_styleguide.yml index b82dbada1e..91c745cdd9 100644 --- a/.rubocop_styleguide.yml +++ b/.rubocop_styleguide.yml @@ -16,6 +16,7 @@ AllCops: - node_modules/**/* # Excluding: inadequate Naming/FileName rule rejects GemFile name with camelcase - engines/web/Gemfile + - .undercover Bundler/DuplicatedGem: Enabled: false diff --git a/.undercover b/.undercover index 95a9fe08c9..9b7d04fdb9 100644 --- a/.undercover +++ b/.undercover @@ -1,5 +1,4 @@ #!/bin/env ruby # frozen_string_literal: true --l coverage/lcov/openfoodnetwork.lcov --c master \ No newline at end of file +-c master diff --git a/Gemfile b/Gemfile index 342f6ec61e..a10912faba 100644 --- a/Gemfile +++ b/Gemfile @@ -172,8 +172,6 @@ end group :test do gem 'pdf-reader' gem 'rails-controller-testing' - gem 'simplecov', require: false - gem 'simplecov-lcov', require: false gem 'undercover', require: false gem 'vcr', require: false gem 'webmock', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 321fcbd450..60fc57e87f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -746,7 +746,6 @@ GEM simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) - simplecov-lcov (0.8.0) simplecov_json_formatter (0.1.4) spreadsheet_architect (5.0.0) caxlsx (>= 3.3.0, < 4) @@ -991,8 +990,6 @@ DEPENDENCIES shoulda-matchers sidekiq sidekiq-scheduler - simplecov - simplecov-lcov spreadsheet_architect spring spring-commands-rspec diff --git a/lib/tasks/simplecov.rake b/lib/tasks/simplecov.rake index d5bc344f06..cc7f5c95e6 100644 --- a/lib/tasks/simplecov.rake +++ b/lib/tasks/simplecov.rake @@ -5,7 +5,7 @@ namespace :simplecov do task :collate_results, # rubocop:disable Rails/RakeEnvironment doesn't need the full env [:path_to_results, :coverage_dir] do |_t, args| require "simplecov" - require "simplecov-lcov" + require "undercover/simplecov_formatter" path_to_results = args[:path_to_results].presence || "tmp/simplecov" output_path = args[:coverage_dir].presence || "coverage" @@ -15,9 +15,8 @@ namespace :simplecov do coverage_dir(output_path) end - SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true SimpleCov.collate Dir[File.join(path_to_results, "**", ".resultset.json")], "rails" do - formatter(SimpleCov::Formatter::LcovFormatter) + formatter(SimpleCov::Formatter::Undercover) coverage_dir(output_path) end end diff --git a/spec/lib/tasks/simplecov_spec.rb b/spec/lib/tasks/simplecov_spec.rb index 68e9d0bc5e..62204b12ef 100644 --- a/spec/lib/tasks/simplecov_spec.rb +++ b/spec/lib/tasks/simplecov_spec.rb @@ -26,6 +26,10 @@ RSpec.describe "simplecov.rake" do and change { File.exist?(File.join(output_dir, "index.html")) }. from(false). + to(true). + + and change { File.exist?(File.join(output_dir, "coverage.json")) }. + from(false). to(true) end end From bed33928e0e2b48f01b0f4d8925cda701a4ca7fc Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 4 Aug 2025 11:55:26 +1000 Subject: [PATCH 6/6] Declare simplecov as direct dependency The undercover docs recommended to remove it from the Gemfile but that's only valid if you use only undercover. We do rely directly on the simplecov gem to generate reports though. --- Gemfile | 1 + Gemfile.lock | 1 + 2 files changed, 2 insertions(+) diff --git a/Gemfile b/Gemfile index a10912faba..3a1e7cf4a0 100644 --- a/Gemfile +++ b/Gemfile @@ -172,6 +172,7 @@ end group :test do gem 'pdf-reader' gem 'rails-controller-testing' + gem 'simplecov', require: false gem 'undercover', require: false gem 'vcr', require: false gem 'webmock', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 60fc57e87f..c3881579b8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -990,6 +990,7 @@ DEPENDENCIES shoulda-matchers sidekiq sidekiq-scheduler + simplecov spreadsheet_architect spring spring-commands-rspec