spec/transform_spec.rb in remi-0.2.39 vs spec/transform_spec.rb in remi-0.2.40

- old
+ new

@@ -48,6 +48,81 @@ it 'can be called directly' do expect(transform.call(1, 2)).to eq [1, 2] end end + + describe Transform::ParseDate do + it 'parses a date using the specified in_format' do + parser = Transform::ParseDate.new(in_format: '%m/%d/%Y') + expect(parser.call('03/22/2011')).to eq Date.new(2011,3,22) + end + + it 'returns a date if it has already been parsed' do + parser = Transform::ParseDate.new(in_format: '%m/%d/%Y') + expect(Date.new(2011,3,22)).to eq Date.new(2011,3,22) + end + + it 'uses ISO 8601 as the default date parser' do + parser = Transform::ParseDate.new + expect(parser.call('2011-03-22')).to eq Date.new(2011,3,22) + end + + it 'fails when an unparseable date is provided' do + parser = Transform::ParseDate.new + expect { parser.call('03/22/2011') }.to raise_error ArgumentError + end + + it 'parses datetimes when the type is specified' do + parser = Transform::ParseDate.new(type: :datetime, in_format: '%m/%d/%Y %H:%M:%S') + expect(parser.call('03/22/2011 04:22:00')).to eq Time.new(2011,3,22,4,22,0) + end + + it 'uses ISO 8601 as the default datetime parser' do + parser = Transform::ParseDate.new(type: :datetime) + expect(parser.call('2011-03-22 04:22:00')).to eq Time.new(2011,3,22,4,22,0) + end + end + + context Transform::FormatDate do + it 'formats a date using the specified out_format' do + formatter = Transform::FormatDate.new(out_format: '%m/%d/%Y') + expect(formatter.call(Date.new(2011,3,22))).to eq '03/22/2011' + end + + it 'formats a datetime using the specified out_format' do + formatter = Transform::FormatDate.new(type: :datetime, out_format: '%m/%d/%Y %H:%M:%S') + expect(formatter.call(Time.new(2011,3,22,4,22,0))).to eq '03/22/2011 04:22:00' + end + + it 'uses the in_format to parse strings when the source is not already a date' do + formatter = Transform::FormatDate.new(in_format: '%d/%m/%Y', out_format: '%m/%d/%Y') + expect(formatter.call('22/03/2011')).to eq '03/22/2011' + end + + it 'fails when an unparseable date is provided' do + formatter = Transform::FormatDate.new(in_format: '%d/%m/%Y', out_format: '%m/%d/%Y') + expect { formatter.call('22/22/2011') }.to raise_error ArgumentError + end + + it 'uses ISO 8601 as the default date parser' do + formatter = Transform::FormatDate.new(out_format: '%m/%d/%Y') + expect(formatter.call('2011-03-22')).to eq '03/22/2011' + end + + it 'uses ISO 8601 as the default date formatter' do + formatter = Transform::FormatDate.new(in_format: '%m/%d/%Y') + expect(formatter.call('03/22/2011')).to eq '2011-03-22' + end + + it 'uses ISO 8601 as the default datetime parser' do + formatter = Transform::FormatDate.new(type: :datetime, out_format: '%m/%d/%Y %H:%M:%S') + expect(formatter.call('2011-03-22 04:22:00')).to eq '03/22/2011 04:22:00' + end + + it 'uses ISO 8601 as the default datetime formatter' do + formatter = Transform::FormatDate.new(type: :datetime, in_format: '%m/%d/%Y %H:%M:%S') + expect(formatter.call('03/22/2011 04:22:00')).to eq '2011-03-22 04:22:00' + end + end + end