diff options
Diffstat (limited to 'spec/models/ci/daily_build_group_report_result_spec.rb')
-rw-r--r-- | spec/models/ci/daily_build_group_report_result_spec.rb | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/spec/models/ci/daily_build_group_report_result_spec.rb b/spec/models/ci/daily_build_group_report_result_spec.rb index 326366666cb..f16396d62c9 100644 --- a/spec/models/ci/daily_build_group_report_result_spec.rb +++ b/spec/models/ci/daily_build_group_report_result_spec.rb @@ -81,4 +81,81 @@ RSpec.describe Ci::DailyBuildGroupReportResult do end end end + + describe 'scopes' do + let_it_be(:project) { create(:project) } + let(:recent_build_group_report_result) { create(:ci_daily_build_group_report_result, project: project) } + let(:old_build_group_report_result) do + create(:ci_daily_build_group_report_result, date: 1.week.ago, project: project) + end + + describe '.by_projects' do + subject { described_class.by_projects([project.id]) } + + it 'returns records by projects' do + expect(subject).to contain_exactly(recent_build_group_report_result, old_build_group_report_result) + end + end + + describe '.with_coverage' do + subject { described_class.with_coverage } + + it 'returns data with coverage' do + expect(subject).to contain_exactly(recent_build_group_report_result, old_build_group_report_result) + end + end + + describe '.with_default_branch' do + subject(:coverages) { described_class.with_default_branch } + + context 'when coverage for the default branch exist' do + let!(:recent_build_group_report_result) { create(:ci_daily_build_group_report_result, project: project) } + let!(:coverage_feature_branch) { create(:ci_daily_build_group_report_result, :on_feature_branch, project: project) } + + it 'returns coverage with the default branch' do + expect(coverages).to contain_exactly(recent_build_group_report_result) + end + end + + context 'when coverage for the default branch does not exist' do + it 'returns an empty collection' do + expect(coverages).to be_empty + end + end + end + + describe '.by_date' do + subject(:coverages) { described_class.by_date(start_date) } + + let!(:coverage_1) { create(:ci_daily_build_group_report_result, date: 1.week.ago) } + + context 'when project has several coverage' do + let!(:coverage_2) { create(:ci_daily_build_group_report_result, date: 2.weeks.ago) } + let(:start_date) { 1.week.ago.to_date.to_s } + + it 'returns the coverage from the start_date' do + expect(coverages).to contain_exactly(coverage_1) + end + end + + context 'when start_date is over 90 days' do + let!(:coverage_2) { create(:ci_daily_build_group_report_result, date: 90.days.ago) } + let!(:coverage_3) { create(:ci_daily_build_group_report_result, date: 91.days.ago) } + let(:start_date) { 1.year.ago.to_date.to_s } + + it 'returns the coverage in the last 90 days' do + expect(coverages).to contain_exactly(coverage_1, coverage_2) + end + end + + context 'when start_date is not a string' do + let!(:coverage_2) { create(:ci_daily_build_group_report_result, date: 90.days.ago) } + let(:start_date) { 1.week.ago } + + it 'returns the coverage in the last 90 days' do + expect(coverages).to contain_exactly(coverage_1, coverage_2) + end + end + end + end end |