1# frozen_string_literal: true
2
3module QA
4  RSpec.describe 'Verify', :runner do
5    describe 'Code coverage statistics' do
6      let(:simplecov) { '\(\d+.\d+\%\) covered' }
7      let(:executor) { "qa-runner-#{Time.now.to_i}" }
8      let(:runner) do
9        Resource::Runner.fabricate_via_api! do |runner|
10          runner.name = executor
11          runner.tags = ['e2e-test']
12        end
13      end
14
15      let(:merge_request) do
16        Resource::MergeRequest.fabricate_via_api! do |mr|
17          mr.project = runner.project
18          mr.file_name = '.gitlab-ci.yml'
19          mr.file_content = <<~EOF
20            test:
21              tags: [e2e-test]
22              script:
23                - echo '(66.67%) covered'
24          EOF
25        end
26      end
27
28      before do
29        Flow::Login.sign_in
30      end
31
32      after do
33        runner.remove_via_api!
34      end
35
36      it 'creates an MR with code coverage statistics', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348068' do
37        runner.project.visit!
38        configure_code_coverage(simplecov)
39        merge_request.visit!
40
41        Page::MergeRequest::Show.perform do |mr_widget|
42          mr_widget.has_pipeline_status?('passed')
43          expect(mr_widget).to have_content('Test coverage 66.67%')
44        end
45      end
46    end
47
48    private
49
50    def configure_code_coverage(coverage_tool_pattern)
51      Page::Project::Menu.perform(&:go_to_ci_cd_settings)
52      Page::Project::Settings::CiCd.perform do |settings|
53        settings.expand_general_pipelines do |coverage|
54          coverage.configure_coverage_regex(coverage_tool_pattern)
55        end
56      end
57    end
58  end
59end
60