Commit 308c967d authored by Zeger-Jan van de Weg's avatar Zeger-Jan van de Weg

Validate uniqueness of milestone title per project

Fixes #3903
parent 05519b55
...@@ -35,6 +35,7 @@ v 8.5.0 (unreleased) ...@@ -35,6 +35,7 @@ v 8.5.0 (unreleased)
- Fixed logo animation on Safari (Roman Rott) - Fixed logo animation on Safari (Roman Rott)
- Hide remove source branch button when the MR is merged but new commits are pushed (Zeger-Jan van de Weg) - Hide remove source branch button when the MR is merged but new commits are pushed (Zeger-Jan van de Weg)
- In seach autocomplete show only groups and projects you are member of - In seach autocomplete show only groups and projects you are member of
- Title for milestones should be unique (Zeger-Jan van de Weg)
v 8.4.4 v 8.4.4
- Update omniauth-saml gem to 1.4.2 - Update omniauth-saml gem to 1.4.2
......
...@@ -34,7 +34,7 @@ class Milestone < ActiveRecord::Base ...@@ -34,7 +34,7 @@ class Milestone < ActiveRecord::Base
scope :closed, -> { with_state(:closed) } scope :closed, -> { with_state(:closed) }
scope :of_projects, ->(ids) { where(project_id: ids) } scope :of_projects, ->(ids) { where(project_id: ids) }
validates :title, presence: true validates :title, presence: true, uniqueness: { scope: :project_id }
validates :project, presence: true validates :project, presence: true
strip_attributes :title strip_attributes :title
......
...@@ -33,6 +33,20 @@ describe Milestone, models: true do ...@@ -33,6 +33,20 @@ describe Milestone, models: true do
let(:milestone) { create(:milestone) } let(:milestone) { create(:milestone) }
let(:issue) { create(:issue) } let(:issue) { create(:issue) }
describe "unique milestone title per project" do
it "shouldn't accept the same title in a project twice" do
new_milestone = Milestone.new(project: milestone.project, title: milestone.title)
expect(new_milestone).not_to be_valid
end
it "should accept the same title in another project" do
project = build(:project)
new_milestone = Milestone.new(project: project, title: milestone.title)
expect(new_milestone).to be_valid
end
end
describe "#percent_complete" do describe "#percent_complete" do
it "should not count open issues" do it "should not count open issues" do
milestone.issues << issue milestone.issues << issue
......
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