Change query to work on mysql as well. Also set entire date because setting only the year can trip 'start_date_should_be_less_than_due_date'
This commit is contained in:
parent
fa32ae5d61
commit
5e8184cc66
|
@ -58,6 +58,7 @@ class Milestone < ApplicationRecord
|
||||||
validate :uniqueness_of_title, if: :title_changed?
|
validate :uniqueness_of_title, if: :title_changed?
|
||||||
validate :milestone_type_check
|
validate :milestone_type_check
|
||||||
validate :start_date_should_be_less_than_due_date, if: proc { |m| m.start_date.present? && m.due_date.present? }
|
validate :start_date_should_be_less_than_due_date, if: proc { |m| m.start_date.present? && m.due_date.present? }
|
||||||
|
validate :dates_within_4_digits
|
||||||
|
|
||||||
strip_attributes :title
|
strip_attributes :title
|
||||||
|
|
||||||
|
@ -326,6 +327,16 @@ class Milestone < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dates_within_4_digits
|
||||||
|
if start_date && start_date > Date.new(9999, 12, 31)
|
||||||
|
errors.add(:start_date, _("date must not be after 9999-12-31"))
|
||||||
|
end
|
||||||
|
|
||||||
|
if due_date && due_date > Date.new(9999, 12, 31)
|
||||||
|
errors.add(:due_date, _("date must not be after 9999-12-31"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def issues_finder_params
|
def issues_finder_params
|
||||||
{ project_id: project_id }
|
{ project_id: project_id }
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Limit milestone dates to before year 9999
|
||||||
|
merge_request: 28742
|
||||||
|
author: Luke Picciau
|
||||||
|
type: fixed
|
|
@ -0,0 +1,38 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||||
|
# for more information on how to write migrations for GitLab.
|
||||||
|
|
||||||
|
class LimitMilestoneDateYearsTo4Digits < ActiveRecord::Migration[5.1]
|
||||||
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
|
# Set this constant to true if this migration requires downtime.
|
||||||
|
DOWNTIME = false
|
||||||
|
|
||||||
|
# When a migration requires downtime you **must** uncomment the following
|
||||||
|
# constant and define a short and easy to understand explanation as to why the
|
||||||
|
# migration requires downtime.
|
||||||
|
# DOWNTIME_REASON = ''
|
||||||
|
|
||||||
|
# When using the methods "add_concurrent_index", "remove_concurrent_index" or
|
||||||
|
# "add_column_with_default" you must disable the use of transactions
|
||||||
|
# as these methods can not run in an existing transaction.
|
||||||
|
# When using "add_concurrent_index" or "remove_concurrent_index" methods make sure
|
||||||
|
# that either of them is the _only_ method called in the migration,
|
||||||
|
# any other changes should go in a separate migration.
|
||||||
|
# This ensures that upon failure _only_ the index creation or removing fails
|
||||||
|
# and can be retried or reverted easily.
|
||||||
|
#
|
||||||
|
# To disable transactions uncomment the following line and remove these
|
||||||
|
# comments:
|
||||||
|
# disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
Milestone.where("start_date > '9999-12-31'").update_all(
|
||||||
|
"start_date = '9999-12-31'"
|
||||||
|
)
|
||||||
|
Milestone.where("due_date > '9999-12-31'").update_all(
|
||||||
|
"due_date = '9999-12-31'"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -11991,6 +11991,9 @@ msgstr ""
|
||||||
msgid "customize"
|
msgid "customize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "date must not be after 9999-12-31"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "day"
|
msgid "day"
|
||||||
msgid_plural "days"
|
msgid_plural "days"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
|
|
|
@ -31,12 +31,28 @@ describe Milestone do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'start_date' do
|
describe 'start_date' do
|
||||||
it 'adds an error when start_date is greated then due_date' do
|
it 'adds an error when start_date is greater then due_date' do
|
||||||
milestone = build(:milestone, start_date: Date.tomorrow, due_date: Date.yesterday)
|
milestone = build(:milestone, start_date: Date.tomorrow, due_date: Date.yesterday)
|
||||||
|
|
||||||
expect(milestone).not_to be_valid
|
expect(milestone).not_to be_valid
|
||||||
expect(milestone.errors[:due_date]).to include("must be greater than start date")
|
expect(milestone.errors[:due_date]).to include("must be greater than start date")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'adds an error when start_date is greater than 9999-12-31' do
|
||||||
|
milestone = build(:milestone, start_date: Date.new(10000, 1, 1))
|
||||||
|
|
||||||
|
expect(milestone).not_to be_valid
|
||||||
|
expect(milestone.errors[:start_date]).to include("date must not be after 9999-12-31")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'due_date' do
|
||||||
|
it 'adds an error when due_date is greater than 9999-12-31' do
|
||||||
|
milestone = build(:milestone, due_date: Date.new(10000, 1, 1))
|
||||||
|
|
||||||
|
expect(milestone).not_to be_valid
|
||||||
|
expect(milestone.errors[:due_date]).to include("date must not be after 9999-12-31")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -381,21 +397,6 @@ describe Milestone do
|
||||||
expect(milestone_ids).to be_empty
|
expect(milestone_ids).to be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a milestone with a date after 294276 AD', :postgresql do
|
|
||||||
before do
|
|
||||||
past_milestone_project_1.update!(due_date: Date.new(294277, 1, 1))
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns the next upcoming open milestone ID for each project and group' do
|
|
||||||
expect(milestone_ids).to contain_exactly(
|
|
||||||
current_milestone_project_1.id,
|
|
||||||
current_milestone_project_2.id,
|
|
||||||
current_milestone_group_1.id,
|
|
||||||
current_milestone_group_2.id
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#to_reference' do
|
describe '#to_reference' do
|
||||||
|
|
Loading…
Reference in New Issue