diff options
Diffstat (limited to 'spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb | 146 |
1 files changed, 135 insertions, 11 deletions
diff --git a/spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb b/spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb index 6bb6771678a..c44d32ddb7d 100644 --- a/spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb +++ b/spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do +RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer, :aggregate_failures do include TestReportsHelper let(:comparer) { described_class.new(name, base_suite, head_suite) } - let(:name) { 'rpsec' } + let(:name) { 'rspec' } let(:base_suite) { Gitlab::Ci::Reports::TestSuite.new(name) } let(:head_suite) { Gitlab::Ci::Reports::TestSuite.new(name) } let(:test_case_success) { create_test_case_java_success } @@ -16,7 +16,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do describe '#new_failures' do subject { comparer.new_failures } - context 'when head sutie has a newly failed test case which does not exist in base' do + context 'when head suite has a newly failed test case which does not exist in base' do before do base_suite.add_test_case(test_case_success) head_suite.add_test_case(test_case_failed) @@ -27,7 +27,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie still has a failed test case which failed in base' do + context 'when head suite still has a failed test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_failed) @@ -38,7 +38,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie has a success test case which failed in base' do + context 'when head suite has a success test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_success) @@ -53,7 +53,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do describe '#existing_failures' do subject { comparer.existing_failures } - context 'when head sutie has a newly failed test case which does not exist in base' do + context 'when head suite has a newly failed test case which does not exist in base' do before do base_suite.add_test_case(test_case_success) head_suite.add_test_case(test_case_failed) @@ -64,7 +64,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie still has a failed test case which failed in base' do + context 'when head suite still has a failed test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_failed) @@ -75,7 +75,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie has a success test case which failed in base' do + context 'when head suite has a success test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_success) @@ -90,7 +90,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do describe '#resolved_failures' do subject { comparer.resolved_failures } - context 'when head sutie has a newly failed test case which does not exist in base' do + context 'when head suite has a newly failed test case which does not exist in base' do before do base_suite.add_test_case(test_case_success) head_suite.add_test_case(test_case_failed) @@ -105,7 +105,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie still has a failed test case which failed in base' do + context 'when head suite still has a failed test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_failed) @@ -120,7 +120,7 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end - context 'when head sutie has a success test case which failed in base' do + context 'when head suite has a success test case which failed in base' do before do base_suite.add_test_case(test_case_failed) head_suite.add_test_case(test_case_success) @@ -347,4 +347,128 @@ RSpec.describe Gitlab::Ci::Reports::TestSuiteComparer do end end end + + describe '#limited_tests' do + subject(:limited_tests) { comparer.limited_tests } + + context 'limits amount of tests returned' do + before do + stub_const("#{described_class}::DEFAULT_MAX_TESTS", 2) + stub_const("#{described_class}::DEFAULT_MIN_TESTS", 1) + end + + context 'prefers new over existing and resolved' do + before do + 3.times { add_new_failure } + 3.times { add_new_error } + 3.times { add_existing_failure } + 3.times { add_existing_error } + 3.times { add_resolved_failure } + 3.times { add_resolved_error } + end + + it 'returns 2 of each new category, and 1 of each resolved and existing' do + expect(limited_tests.new_failures.count).to eq(2) + expect(limited_tests.new_errors.count).to eq(2) + expect(limited_tests.existing_failures.count).to eq(1) + expect(limited_tests.existing_errors.count).to eq(1) + expect(limited_tests.resolved_failures.count).to eq(1) + expect(limited_tests.resolved_errors.count).to eq(1) + end + + it 'does not affect the overall count' do + expect(summary).to include(total: 18, resolved: 6, failed: 6, errored: 6) + end + end + + context 'prefers existing over resolved' do + before do + 3.times { add_existing_failure } + 3.times { add_existing_error } + 3.times { add_resolved_failure } + 3.times { add_resolved_error } + end + + it 'returns 2 of each existing category, and 1 of each resolved' do + expect(limited_tests.new_failures.count).to eq(0) + expect(limited_tests.new_errors.count).to eq(0) + expect(limited_tests.existing_failures.count).to eq(2) + expect(limited_tests.existing_errors.count).to eq(2) + expect(limited_tests.resolved_failures.count).to eq(1) + expect(limited_tests.resolved_errors.count).to eq(1) + end + + it 'does not affect the overall count' do + expect(summary).to include(total: 12, resolved: 6, failed: 3, errored: 3) + end + end + + context 'limits amount of resolved' do + before do + 3.times { add_resolved_failure } + 3.times { add_resolved_error } + end + + it 'returns 2 of each resolved category' do + expect(limited_tests.new_failures.count).to eq(0) + expect(limited_tests.new_errors.count).to eq(0) + expect(limited_tests.existing_failures.count).to eq(0) + expect(limited_tests.existing_errors.count).to eq(0) + expect(limited_tests.resolved_failures.count).to eq(2) + expect(limited_tests.resolved_errors.count).to eq(2) + end + + it 'does not affect the overall count' do + expect(summary).to include(total: 6, resolved: 6, failed: 0, errored: 0) + end + end + end + + def summary + { + total: comparer.total_count, + resolved: comparer.resolved_count, + failed: comparer.failed_count, + errored: comparer.error_count + } + end + + def add_new_failure + failed_case = create_test_case_rspec_failed(SecureRandom.hex) + head_suite.add_test_case(failed_case) + end + + def add_new_error + error_case = create_test_case_rspec_error(SecureRandom.hex) + head_suite.add_test_case(error_case) + end + + def add_existing_failure + failed_case = create_test_case_rspec_failed(SecureRandom.hex) + base_suite.add_test_case(failed_case) + head_suite.add_test_case(failed_case) + end + + def add_existing_error + error_case = create_test_case_rspec_error(SecureRandom.hex) + base_suite.add_test_case(error_case) + head_suite.add_test_case(error_case) + end + + def add_resolved_failure + case_name = SecureRandom.hex + failed_case = create_test_case_java_failed(case_name) + success_case = create_test_case_java_success(case_name) + base_suite.add_test_case(failed_case) + head_suite.add_test_case(success_case) + end + + def add_resolved_error + case_name = SecureRandom.hex + error_case = create_test_case_java_error(case_name) + success_case = create_test_case_java_success(case_name) + base_suite.add_test_case(error_case) + head_suite.add_test_case(success_case) + end + end end |