gitlab-org--gitlab-foss/spec/models/concerns/chronic_duration_attribute_...

116 lines
2.9 KiB
Ruby
Raw Normal View History

2018-02-20 19:09:59 -05:00
require 'spec_helper'
2018-02-20 22:03:12 -05:00
shared_examples 'ChronicDurationAttribute reader' do
it 'contains dynamically created reader method' do
expect(subject.class).to be_public_method_defined(virtual_field)
end
2018-02-20 19:09:59 -05:00
it 'outputs chronic duration formatted value' do
2018-02-20 22:03:12 -05:00
subject.send("#{source_field}=", 120)
2018-02-20 19:09:59 -05:00
2018-02-20 22:03:12 -05:00
expect(subject.send(virtual_field)).to eq('2m')
end
context 'when value is set to nil' do
it 'outputs nil' do
subject.send("#{source_field}=", nil)
expect(subject.send(virtual_field)).to be_nil
end
end
2018-02-20 22:03:12 -05:00
end
shared_examples 'ChronicDurationAttribute writer' do
it 'contains dynamically created writer method' do
expect(subject.class).to be_public_method_defined("#{virtual_field}=")
end
2018-02-20 19:09:59 -05:00
before do
subject.send("#{virtual_field}=", '10m')
end
2018-02-20 19:09:59 -05:00
it 'parses chronic duration input' do
2018-02-20 22:03:12 -05:00
expect(subject.send(source_field)).to eq(600)
2018-02-20 19:09:59 -05:00
end
it 'passes validation' do
expect(subject.valid?).to be_truthy
end
2018-03-05 14:22:00 -05:00
context 'when negative input is used' do
before do
subject.send("#{source_field}=", 3600)
end
it "doesn't raise exception" do
expect { subject.send("#{virtual_field}=", '-10m') }.not_to raise_error(ChronicDuration::DurationParseError)
end
it "doesn't change value" do
expect { subject.send("#{virtual_field}=", '-10m') }.not_to change { subject.send(source_field) }
end
2018-03-05 14:22:00 -05:00
it "doesn't pass validation" do
subject.send("#{virtual_field}=", '-10m')
2018-03-05 14:22:00 -05:00
expect(subject.valid?).to be_falsey
expect(subject.errors&.messages).to include(virtual_field => ['is not a correct duration'])
end
2018-03-05 14:22:00 -05:00
end
context 'when empty input is used' do
before do
subject.send("#{virtual_field}=", '')
end
it 'writes nil' do
expect(subject.send(source_field)).to be_nil
end
it 'passes validation' do
expect(subject.valid?).to be_truthy
end
2018-03-05 14:22:00 -05:00
end
context 'when nil input is used' do
before do
subject.send("#{virtual_field}=", nil)
end
it 'writes nil' do
expect(subject.send(source_field)).to be_nil
end
it 'passes validation' do
expect(subject.valid?).to be_truthy
end
it "doesn't raise exception" do
expect { subject.send("#{virtual_field}=", nil) }.not_to raise_error(NoMethodError)
end
2018-03-05 14:22:00 -05:00
end
2018-02-20 19:09:59 -05:00
end
describe 'ChronicDurationAttribute' do
let(:source_field) {:maximum_timeout}
let(:virtual_field) {:maximum_timeout_human_readable}
2018-03-01 13:43:10 -05:00
subject { Ci::Runner.new }
2018-02-20 22:03:12 -05:00
it_behaves_like 'ChronicDurationAttribute reader'
it_behaves_like 'ChronicDurationAttribute writer'
end
describe 'ChronicDurationAttribute - reader' do
2018-03-06 10:25:13 -05:00
let(:source_field) {:timeout}
let(:virtual_field) {:timeout_human_readable}
subject {Ci::BuildMetadata.new}
2018-02-20 22:03:12 -05:00
it "doesn't contain dynamically created writer method" do
expect(subject.class).not_to be_public_method_defined("#{virtual_field}=")
end
2018-02-20 19:09:59 -05:00
2018-02-20 22:03:12 -05:00
it_behaves_like 'ChronicDurationAttribute reader'
2018-02-20 19:09:59 -05:00
end