Commit 6f62020c authored by Jarka Košanová's avatar Jarka Košanová

Make sure milestones project/group are valid

# Conflicts:
#	ee/spec/models/burndown_spec.rb
parent cd3fac82
...@@ -121,6 +121,8 @@ module Issuable ...@@ -121,6 +121,8 @@ module Issuable
end end
def milestone_available? def milestone_available?
return if is_a?(Epic)
project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group) project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group)
end end
......
...@@ -133,26 +133,26 @@ describe Burndown do ...@@ -133,26 +133,26 @@ describe Burndown do
end end
describe 'group milestone burndown' do describe 'group milestone burndown' do
let(:group) { create(:group) } let(:parent_group) { create(:group) }
let(:nested_group) { create(:group, parent: group) } let(:group) { create(:group, parent: parent_group) }
let(:parent_group_project) { create(:project, group: parent_group) }
let(:group_project) { create(:project, group: group) } let(:group_project) { create(:project, group: group) }
let(:nested_group_project) { create(:project, group: nested_group) } let(:parent_group_milestone) { create(:milestone, project: nil, group: parent_group, start_date: start_date, due_date: due_date) }
let(:group_milestone) { create(:milestone, project: nil, group: group, start_date: start_date, due_date: due_date) } let(:group_milestone) { create(:milestone, group: group, start_date: start_date, due_date: due_date) }
let(:nested_group_milestone) { create(:milestone, group: nested_group, start_date: start_date, due_date: due_date) }
context 'when nested group milestone', :nested_groups do context 'when nested group milestone', :nested_groups do
before do before do
group.add_developer(user) parent_group.add_developer(user)
end end
it_behaves_like 'burndown for milestone' do it_behaves_like 'burndown for milestone' do
let(:milestone) { nested_group_milestone } let(:milestone) { group_milestone }
let(:project) { nested_group_project } let(:project) { group_project }
let(:issue_params) do let(:issue_params) do
{ {
milestone: milestone, milestone: milestone,
weight: 2, weight: 2,
project_id: nested_group_project.id, project_id: group_project.id,
author: user, author: user,
created_at: milestone.start_date created_at: milestone.start_date
} }
......
require 'spec_helper' require 'spec_helper'
describe Epic do describe Epic do
let(:group) { create(:group) }
let(:project) { create(:project, group: group) }
describe 'associations' do describe 'associations' do
subject { build(:epic) } subject { build(:epic) }
...@@ -221,29 +224,32 @@ describe Epic do ...@@ -221,29 +224,32 @@ describe Epic do
end end
context 'fixed date is not set' do context 'fixed date is not set' do
subject { create(:epic, start_date: nil, end_date: nil) } subject { create(:epic, start_date: nil, end_date: nil, group: group) }
let(:milestone1) do let(:milestone1) do
create( create(
:milestone, :milestone,
start_date: Date.new(2000, 1, 1), start_date: Date.new(2000, 1, 1),
due_date: Date.new(2000, 1, 10) due_date: Date.new(2000, 1, 10),
group: group
) )
end end
let(:milestone2) do let(:milestone2) do
create( create(
:milestone, :milestone,
start_date: Date.new(2000, 1, 3), start_date: Date.new(2000, 1, 3),
due_date: Date.new(2000, 1, 20) due_date: Date.new(2000, 1, 20),
group: group
) )
end end
context 'multiple milestones' do context 'multiple milestones' do
before do before do
epic_issue1 = create(:epic_issue, epic: subject) issue1 = create(:issue, project: project, milestone: milestone1)
epic_issue1.issue.update(milestone: milestone1) issue2 = create(:issue, project: project, milestone: milestone2)
epic_issue2 = create(:epic_issue, epic: subject)
epic_issue2.issue.update(milestone: milestone2) create(:epic_issue, epic: subject, issue: issue1)
create(:epic_issue, epic: subject, issue: issue2)
end end
context 'complete start and due dates' do context 'complete start and due dates' do
...@@ -260,14 +266,16 @@ describe Epic do ...@@ -260,14 +266,16 @@ describe Epic do
create( create(
:milestone, :milestone,
start_date: Date.new(2000, 1, 1), start_date: Date.new(2000, 1, 1),
due_date: nil due_date: nil,
group: group
) )
end end
let(:milestone2) do let(:milestone2) do
create( create(
:milestone, :milestone,
start_date: Date.new(2000, 1, 3), start_date: Date.new(2000, 1, 3),
due_date: nil due_date: nil,
group: group
) )
end end
...@@ -284,14 +292,16 @@ describe Epic do ...@@ -284,14 +292,16 @@ describe Epic do
create( create(
:milestone, :milestone,
start_date: nil, start_date: nil,
due_date: nil due_date: nil,
group: group
) )
end end
let(:milestone2) do let(:milestone2) do
create( create(
:milestone, :milestone,
start_date: nil, start_date: nil,
due_date: nil due_date: nil,
group: group
) )
end end
...@@ -322,7 +332,7 @@ describe Epic do ...@@ -322,7 +332,7 @@ describe Epic do
context 'single milestone' do context 'single milestone' do
before do before do
epic_issue1 = create(:epic_issue, epic: subject) epic_issue1 = create(:epic_issue, epic: subject)
epic_issue1.issue.update(milestone: milestone1) epic_issue1.issue.update(milestone: milestone1, project: project)
end end
context 'complete start and due dates' do context 'complete start and due dates' do
...@@ -339,7 +349,8 @@ describe Epic do ...@@ -339,7 +349,8 @@ describe Epic do
create( create(
:milestone, :milestone,
start_date: Date.new(2000, 1, 1), start_date: Date.new(2000, 1, 1),
due_date: nil due_date: nil,
group: group
) )
end end
...@@ -356,7 +367,8 @@ describe Epic do ...@@ -356,7 +367,8 @@ describe Epic do
create( create(
:milestone, :milestone,
start_date: nil, start_date: nil,
due_date: nil due_date: nil,
group: group
) )
end end
...@@ -373,12 +385,12 @@ describe Epic do ...@@ -373,12 +385,12 @@ describe Epic do
describe '.update_start_and_due_dates' do describe '.update_start_and_due_dates' do
def link_epic_to_milestone(epic, milestone) def link_epic_to_milestone(epic, milestone)
create(:issue, epic: epic, milestone: milestone) create(:issue, epic: epic, milestone: milestone, project: project)
end end
it 'updates in bulk' do it 'updates in bulk' do
milestone1 = create(:milestone, start_date: Date.new(2000, 1, 1), due_date: Date.new(2000, 1, 10)) milestone1 = create(:milestone, start_date: Date.new(2000, 1, 1), due_date: Date.new(2000, 1, 10), group: group)
milestone2 = create(:milestone, due_date: Date.new(2000, 1, 30)) milestone2 = create(:milestone, due_date: Date.new(2000, 1, 30), group: group)
epics = [ epics = [
create(:epic), create(:epic),
...@@ -414,8 +426,8 @@ describe Epic do ...@@ -414,8 +426,8 @@ describe Epic do
end end
context 'query count check' do context 'query count check' do
let(:milestone) { create(:milestone, start_date: Date.new(2000, 1, 1), due_date: Date.new(2000, 1, 10)) } let(:milestone) { create(:milestone, start_date: Date.new(2000, 1, 1), due_date: Date.new(2000, 1, 10), group: group) }
let!(:epics) { [create(:epic)] } let!(:epics) { [create(:epic, group: group)] }
def setup_control_group def setup_control_group
link_epic_to_milestone(epics[0], milestone) link_epic_to_milestone(epics[0], milestone)
......
...@@ -20,7 +20,8 @@ describe Boards::Issues::ListService, services: true do ...@@ -20,7 +20,8 @@ describe Boards::Issues::ListService, services: true do
let(:p3) { create(:group_label, title: 'P3', group: group) } let(:p3) { create(:group_label, title: 'P3', group: group) }
let(:user_list) { create(:user_list, board: board, position: 2) } let(:user_list) { create(:user_list, board: board, position: 2) }
let(:milestone_list) { create(:milestone_list, board: board, position: 3) } let(:milestone) { create(:milestone, group: group) }
let(:milestone_list) { create(:milestone_list, board: board, position: 3, milestone: milestone) }
let(:backlog) { create(:backlog_list, board: board) } let(:backlog) { create(:backlog_list, board: board) }
let(:list1) { create(:list, board: board, label: development, position: 0) } let(:list1) { create(:list, board: board, label: development, position: 0) }
let(:list2) { create(:list, board: board, label: testing, position: 1) } let(:list2) { create(:list, board: board, label: testing, position: 1) }
......
...@@ -37,15 +37,6 @@ describe Issuable::Clone::AttributesRewriter do ...@@ -37,15 +37,6 @@ describe Issuable::Clone::AttributesRewriter do
expect(new_epic.reload.milestone).to be_nil expect(new_epic.reload.milestone).to be_nil
end end
it 'copies the milestone when old issue milestone is a group milestone' do
milestone = create(:milestone, title: 'milestone', group: group)
original_issue.update(milestone: milestone)
subject.execute
expect(new_epic.reload.milestone).to eq(milestone)
end
end end
end end
end end
...@@ -14,10 +14,10 @@ describe Issues::UpdateService do ...@@ -14,10 +14,10 @@ describe Issues::UpdateService do
context 'refresh epic dates' do context 'refresh epic dates' do
let(:epic) { create(:epic) } let(:epic) { create(:epic) }
let(:issue) { create(:issue, epic: epic) } let(:issue) { create(:issue, epic: epic, project: project) }
context 'updating milestone' do context 'updating milestone' do
let(:milestone) { create(:milestone) } let(:milestone) { create(:milestone, project: project) }
it 'calls epic#update_start_and_due_dates' do it 'calls epic#update_start_and_due_dates' do
expect(epic).to receive(:update_start_and_due_dates).twice expect(epic).to receive(:update_start_and_due_dates).twice
......
...@@ -55,9 +55,8 @@ describe EpicIssues::ListService do ...@@ -55,9 +55,8 @@ describe EpicIssues::ListService do
control_count = ActiveRecord::QueryRecorder.new { list_service.execute }.count control_count = ActiveRecord::QueryRecorder.new { list_service.execute }.count
new_group2 = create(:group, :private) new_group2 = create(:group, :private)
new_project2 = create(:project, namespace: new_group2)
new_group2.add_developer(user) new_group2.add_developer(user)
milestone3 = create(:milestone, project: new_project2) milestone3 = create(:milestone, project: new_project)
new_issue4 = create(:issue, project: new_project, milestone: milestone3) new_issue4 = create(:issue, project: new_project, milestone: milestone3)
create(:epic_issue, issue: new_issue4, epic: epic, relative_position: 6) create(:epic_issue, issue: new_issue4, epic: epic, relative_position: 6)
......
...@@ -64,7 +64,6 @@ describe Epics::IssuePromoteService do ...@@ -64,7 +64,6 @@ describe Epics::IssuePromoteService do
expect(epic.description).to eq(issue.description) expect(epic.description).to eq(issue.description)
expect(epic.author).to eq(user) expect(epic.author).to eq(user)
expect(epic.group).to eq(group) expect(epic.group).to eq(group)
expect(epic.milestone).to eq(milestone)
end end
it 'copies group labels assigned to the issue' do it 'copies group labels assigned to the issue' do
......
...@@ -9,7 +9,7 @@ describe Milestones::UpdateService do ...@@ -9,7 +9,7 @@ describe Milestones::UpdateService do
user = build(:user) user = build(:user)
milestone = create(:milestone, project: project) milestone = create(:milestone, project: project)
epic = create(:epic) epic = create(:epic)
create(:issue, milestone: milestone, epic: epic) create(:issue, milestone: milestone, epic: epic, project: project)
due_date = 3.days.from_now.to_date due_date = 3.days.from_now.to_date
described_class.new(project, user, { due_date: due_date }).execute(milestone) described_class.new(project, user, { due_date: due_date }).execute(milestone)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment