Commit 519d1054 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Add custom validation message for chronic duration attribute

parent c6c21dd4
...@@ -114,7 +114,8 @@ module Ci ...@@ -114,7 +114,8 @@ module Ci
cached_attr_reader :version, :revision, :platform, :architecture, :ip_address, :contacted_at cached_attr_reader :version, :revision, :platform, :architecture, :ip_address, :contacted_at
chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout,
error_message: 'Maximum job timeout has a value which could not be accepted'
validates :maximum_timeout, allow_nil: true, validates :maximum_timeout, allow_nil: true,
numericality: { greater_than_or_equal_to: 600, numericality: { greater_than_or_equal_to: 600,
......
...@@ -24,7 +24,7 @@ module ChronicDurationAttribute ...@@ -24,7 +24,7 @@ module ChronicDurationAttribute
end end
end end
validates virtual_attribute, allow_nil: true, duration: true validates virtual_attribute, allow_nil: true, duration: { message: parameters[:error_message] }
end end
alias_method :chronic_duration_attr, :chronic_duration_attr_writer alias_method :chronic_duration_attr, :chronic_duration_attr_writer
......
...@@ -384,7 +384,8 @@ class Project < ActiveRecord::Base ...@@ -384,7 +384,8 @@ class Project < ActiveRecord::Base
enum auto_cancel_pending_pipelines: { disabled: 0, enabled: 1 } enum auto_cancel_pending_pipelines: { disabled: 0, enabled: 1 }
chronic_duration_attr :build_timeout_human_readable, :build_timeout, default: 3600 chronic_duration_attr :build_timeout_human_readable, :build_timeout,
default: 3600, error_message: 'Maximum job timeout has a value which could not be accepted'
validates :build_timeout, allow_nil: true, validates :build_timeout, allow_nil: true,
numericality: { greater_than_or_equal_to: 10.minutes, numericality: { greater_than_or_equal_to: 10.minutes,
......
...@@ -14,6 +14,10 @@ class DurationValidator < ActiveModel::EachValidator ...@@ -14,6 +14,10 @@ class DurationValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
ChronicDuration.parse(value) ChronicDuration.parse(value)
rescue ChronicDuration::DurationParseError rescue ChronicDuration::DurationParseError
record.errors.add(attribute, "is not a correct duration") if options[:message]
record.errors.add(:base, options[:message])
else
record.errors.add(attribute, "is not a correct duration")
end
end end
end end
...@@ -54,7 +54,8 @@ shared_examples 'ChronicDurationAttribute writer' do ...@@ -54,7 +54,8 @@ shared_examples 'ChronicDurationAttribute writer' do
subject.send("#{virtual_field}=", '-10m') subject.send("#{virtual_field}=", '-10m')
expect(subject.valid?).to be_falsey expect(subject.valid?).to be_falsey
expect(subject.errors&.messages).to include(virtual_field => ['is not a correct duration']) expect(subject.errors&.messages)
.to include(base: ['Maximum job timeout has a value which could not be accepted'])
end end
end end
......
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