From 0f10e88a256ee803884967b4e34a866e156aea5c Mon Sep 17 00:00:00 2001 From: Fabio Pitino Date: Fri, 3 May 2019 10:29:11 +0100 Subject: [PATCH] If classname attribute is not present in JUnit testcase, default to file Partially fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/50964 --- lib/gitlab/ci/reports/test_case.rb | 2 +- spec/lib/gitlab/ci/parsers/test/junit_spec.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/gitlab/ci/reports/test_case.rb b/lib/gitlab/ci/reports/test_case.rb index 292e273a03aa..3e061a9b6723 100644 --- a/lib/gitlab/ci/reports/test_case.rb +++ b/lib/gitlab/ci/reports/test_case.rb @@ -14,7 +14,7 @@ class TestCase def initialize(name:, classname:, execution_time:, status:, file: nil, system_output: nil, stack_trace: nil) @name = name - @classname = classname + @classname = classname.present? ? classname : file @file = file @execution_time = execution_time.to_f @status = status diff --git a/spec/lib/gitlab/ci/parsers/test/junit_spec.rb b/spec/lib/gitlab/ci/parsers/test/junit_spec.rb index a49402c73980..e1ab3b2e3675 100644 --- a/spec/lib/gitlab/ci/parsers/test/junit_spec.rb +++ b/spec/lib/gitlab/ci/parsers/test/junit_spec.rb @@ -116,6 +116,30 @@ end end + context 'when there are two test cases without classname' do + let(:junit) do + <<-EOF.strip_heredoc + + + + + EOF + end + + it 'parses XML and adds test cases to a suite defaulting classname to file attribute' do + expect { subject }.not_to raise_error + + expect(test_cases[0].classname).to eq('./path/to/file1') + expect(test_cases[0].file).to eq('./path/to/file1') + expect(test_cases[0].name).to eq('sumTest1') + expect(test_cases[0].execution_time).to eq(0.01) + expect(test_cases[1].classname).to eq('./path/to/file2') + expect(test_cases[1].file).to eq('./path/to/file2') + expect(test_cases[1].name).to eq('sumTest2') + expect(test_cases[1].execution_time).to eq(0.02) + end + end + context 'when there are two test suites' do let(:junit) do <<-EOF.strip_heredoc