Sha256: 7fa3ee79d4518354302bceb947be6901c2d9b89d59fb65306a19e5130c638fe9

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

require 'test_helper'

module Vedeu
  class TestClass
    include Coercions

    attr_reader :attributes

    def initialize(attributes = {})
      @attributes = attributes
      @name       = attributes[:name]
    end
  end

  describe Coercions do
    describe '.coercer' do
      [nil, [], {}].each do |empty_value|
        it 'returns an empty collection when nil or empty' do
          TestClass.coercer(empty_value).must_equal([])
        end
      end

      it 'returns when an object' do
        klass = TestClass.new

        TestClass.coercer([klass]).must_equal([klass])
      end

      it 'returns a collection of models when a single hash' do
        coerced = TestClass.coercer({ :name => 'test1' })
        coerced.must_be_instance_of(Array)
        coerced.first.attributes.must_equal({ name: "test1" })
      end

      it 'returns a collection of models when multiple hashes' do
        coerced = TestClass.coercer([
          { :name => 'test1' }, { :name => 'test2' }
        ])
        coerced.size.must_equal(2)
        coerced.map(&:attributes).must_equal(
          [{ name: "test1" }, { name: "test2" }]
        )
      end

      it 'returns a collection of models when a single array' do
        coerced = TestClass.coercer([{ :name => 'test3' }])
        coerced.size.must_equal(1)
        coerced.first.attributes.must_equal({ name: "test3" })
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
vedeu-0.2.4 test/lib/vedeu/support/coercions_test.rb
vedeu-0.2.3 test/lib/vedeu/models/attributes/coercions_test.rb
vedeu-0.2.2 test/lib/vedeu/models/attributes/coercions_test.rb
vedeu-0.2.1 test/lib/vedeu/models/attributes/coercions_test.rb