diff options
| -rw-r--r-- | app/models/concerns/chronic_duration_attribute.rb | 8 | ||||
| -rw-r--r-- | spec/models/concerns/chronic_duration_attribute_spec.rb | 16 |
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 |
