summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/concerns/chronic_duration_attribute.rb8
-rw-r--r--spec/models/concerns/chronic_duration_attribute_spec.rb16
2 files changed, 21 insertions, 3 deletions
diff --git a/app/models/concerns/chronic_duration_attribute.rb b/app/models/concerns/chronic_duration_attribute.rb
index ae3aeda1709..87c60a2b7d5 100644
--- a/app/models/concerns/chronic_duration_attribute.rb
+++ b/app/models/concerns/chronic_duration_attribute.rb
@@ -10,14 +10,20 @@ module ChronicDurationAttribute
def chronic_duration_attr_reader(virtual_attribute, source_attribute)
define_method(virtual_attribute) do
value = self.send(source_attribute) # rubocop:disable GitlabSecurity/PublicSend
- ChronicDuration.output(value, format: :short) unless value.nil?
+
+ return '' if value.nil?
+
+ ChronicDuration.output(value, format: :short)
end
end
def chronic_duration_attr_writer(virtual_attribute, source_attribute)
define_method("#{virtual_attribute}=") do |value|
new_value = ChronicDuration.parse(value).to_i
+ new_value = nil if new_value <= 0
+
self.send("#{source_attribute}=", new_value) # rubocop:disable GitlabSecurity/PublicSend
+
new_value
end
end
diff --git a/spec/models/concerns/chronic_duration_attribute_spec.rb b/spec/models/concerns/chronic_duration_attribute_spec.rb
index 0d9b45e36e8..31db7d055cc 100644
--- a/spec/models/concerns/chronic_duration_attribute_spec.rb
+++ b/spec/models/concerns/chronic_duration_attribute_spec.rb
@@ -5,11 +5,17 @@ shared_examples 'ChronicDurationAttribute reader' do
expect(subject.class).to be_public_method_defined(virtual_field)
end
- it 'outputs chronic duration formated value' do
+ it 'outputs chronic duration formatted value' do
subject.send("#{source_field}=", 120)
expect(subject.send(virtual_field)).to eq('2m')
end
+
+ it 'outputs empty string when value set to nil' do
+ subject.send("#{source_field}=", nil)
+
+ expect(subject.send(virtual_field)).to be_empty
+ end
end
shared_examples 'ChronicDurationAttribute writer' do
@@ -18,10 +24,16 @@ shared_examples 'ChronicDurationAttribute writer' do
end
it 'parses chronic duration input' do
- subject.send("#{virtual_field}=", "10m")
+ subject.send("#{virtual_field}=", '10m')
expect(subject.send(source_field)).to eq(600)
end
+
+ it 'writes null when empty input is used' do
+ subject.send("#{virtual_field}=", '')
+
+ expect(subject.send(source_field)).to be_nil
+ end
end
describe 'ChronicDurationAttribute' do