Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/iteration_spec.rb')
-rw-r--r--spec/models/iteration_spec.rb97
1 files changed, 97 insertions, 0 deletions
diff --git a/spec/models/iteration_spec.rb b/spec/models/iteration_spec.rb
index e7ec5de0ef1..7241a07a215 100644
--- a/spec/models/iteration_spec.rb
+++ b/spec/models/iteration_spec.rb
@@ -5,6 +5,13 @@ require 'spec_helper'
RSpec.describe Iteration do
let_it_be(:project) { create(:project) }
let_it_be(:group) { create(:group) }
+ let(:set_cadence) { nil }
+
+ describe 'associations' do
+ it { is_expected.to belong_to(:project) }
+ it { is_expected.to belong_to(:group) }
+ it { is_expected.to belong_to(:iterations_cadence).inverse_of(:iterations) }
+ end
describe "#iid" do
it "is properly scoped on project and group" do
@@ -32,6 +39,59 @@ RSpec.describe Iteration do
end
end
+ describe 'setting iteration cadence' do
+ let_it_be(:iterations_cadence) { create(:iterations_cadence, group: group, start_date: 10.days.ago) }
+ let(:iteration) { create(:iteration, group: group, iterations_cadence: set_cadence, start_date: 2.days.from_now) }
+
+ context 'when iterations_cadence is set correctly' do
+ let(:set_cadence) { iterations_cadence}
+
+ it 'does not change the iterations_cadence' do
+ expect(iteration.iterations_cadence).to eq(iterations_cadence)
+ end
+ end
+
+ context 'when iterations_cadence exists for the group' do
+ let(:set_cadence) { nil }
+
+ it 'sets the iterations_cadence to the existing record' do
+ expect(iteration.iterations_cadence).to eq(iterations_cadence)
+ end
+ end
+
+ context 'when iterations_cadence does not exists for the group' do
+ let_it_be(:group) { create(:group, name: 'Test group')}
+ let(:iteration) { build(:iteration, group: group, iterations_cadence: set_cadence) }
+
+ it 'creates a default iterations_cadence and uses it for the iteration' do
+ expect { iteration.save! }.to change { Iterations::Cadence.count }.by(1)
+ end
+
+ it 'sets the newly created iterations_cadence to the reecord' do
+ iteration.save!
+
+ expect(iteration.iterations_cadence).to eq(Iterations::Cadence.last)
+ end
+
+ it 'creates the iterations_cadence with the correct attributes' do
+ iteration.save!
+
+ cadence = Iterations::Cadence.last
+
+ expect(cadence.reload.start_date).to eq(iteration.start_date)
+ expect(cadence.title).to eq('Test group Iterations')
+ end
+ end
+
+ context 'when iteration is a project iteration' do
+ it 'does not set the iterations_cadence' do
+ iteration = create(:iteration, iterations_cadence: nil, project: project, skip_project_validation: true)
+
+ expect(iteration.reload.iterations_cadence).to be_nil
+ end
+ end
+ end
+
describe '.filter_by_state' do
let_it_be(:closed_iteration) { create(:iteration, :closed, :skip_future_date_validation, group: group, start_date: 8.days.ago, due_date: 2.days.ago) }
let_it_be(:started_iteration) { create(:iteration, :started, :skip_future_date_validation, group: group, start_date: 1.day.ago, due_date: 6.days.from_now) }
@@ -307,6 +367,43 @@ RSpec.describe Iteration do
end
end
+ describe '#validate_group' do
+ let_it_be(:iterations_cadence) { create(:iterations_cadence, group: group) }
+
+ context 'when the iteration and iteration cadence groups are same' do
+ it 'is valid' do
+ iteration = build(:iteration, group: group, iterations_cadence: iterations_cadence)
+
+ expect(iteration).to be_valid
+ end
+ end
+
+ context 'when the iteration and iteration cadence groups are different' do
+ it 'is invalid' do
+ other_group = create(:group)
+ iteration = build(:iteration, group: other_group, iterations_cadence: iterations_cadence)
+
+ expect(iteration).not_to be_valid
+ end
+ end
+
+ context 'when the iteration belongs to a project and the iteration cadence is set' do
+ it 'is invalid' do
+ iteration = build(:iteration, project: project, iterations_cadence: iterations_cadence, skip_project_validation: true)
+
+ expect(iteration).to be_invalid
+ end
+ end
+
+ context 'when the iteration belongs to a project and the iteration cadence is not set' do
+ it 'is valid' do
+ iteration = build(:iteration, project: project, skip_project_validation: true)
+
+ expect(iteration).to be_valid
+ end
+ end
+ end
+
describe '.within_timeframe' do
let_it_be(:now) { Time.current }
let_it_be(:project) { create(:project, :empty_repo) }