Sha256: e4b2c0e060734445a816f29862c46f699e7e4c5e86fd68ec9c3c64c81f7c5f22

Contents?: true

Size: 1.91 KB

Versions: 26

Compression:

Stored size: 1.91 KB

Contents

RSpec.describe SoapyCake::ResponseValue do
  def subject(*args)
    described_class.new(*args)
  end

  describe '#parse' do
    context 'booleans' do
      it 'converts the string "true" to the true value' do
        expect(subject(:foo, 'true').parse).to eq(true)
      end

      it 'converts the string "false" to the false value' do
        expect(subject(:foo, 'false').parse).to eq(false)
      end
    end

    context 'dates' do
      it 'parses an ISO-formatted date' do
        expect(subject(:foo, '2014-06-30T01:00:00').parse).to eq(DateTime.new(2014, 6, 30, 1))
      end

      it 'properly applies the provided time offset' do
        expect(subject(:foo, '2014-01-01T00:00:00', time_offset: 5).parse)
          .to eq(DateTime.new(2014, 1, 1, 0).change(offset: '+0500'))

        expect(subject(:foo, '2014-12-31T01:00:00', time_offset: -2).parse)
          .to eq(DateTime.new(2014, 12, 31, 1).change(offset: '-0200'))
      end
    end

    context 'strings' do
      it 'parses a string' do
        expect(subject(:foo, 'abc').parse).to eq('abc')
      end
    end

    context 'IDs' do
      it 'converts keys ending in "_id" to integers' do
        expect(subject(:conversion_id, '42').parse).to eq(42)
      end

      it "doesn't convert ids in the blacklist to integers" do
        expect(subject(:tax_id, '123abc').parse).to eq('123abc')
        expect(subject(:other_tax_id, '123abc').parse).to eq('123abc')
        expect(subject(:transaction_id, '123abc').parse).to eq('123abc')
      end

      it 'raises an error if not in the blacklist and non-digit characters are detected' do
        expect { subject(:foo_id, '123abc').parse }.to raise_error(SoapyCake::Error)
      end

      it 'does not raise an error if the value is absent' do
        expect(subject(:foo_id, '-1').parse).to eq(-1)
        expect(subject(:foo_id, '').parse).to eq(0)
        expect(subject(:foo_id, nil).parse).to eq(0)
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
soapy_cake-1.15.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.14.4 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.14.3 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.14.2 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.14.1 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.14.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.13.1 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.13.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.6 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.12.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.5 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.4 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.3 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.2 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.1 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.11.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.10.2 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.10.1 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.10.0 spec/lib/soapy_cake/response_value_spec.rb
soapy_cake-1.9.2 spec/lib/soapy_cake/response_value_spec.rb