Sha256: f91a3b2e568241fc6d2817bf323a746eba09dc5b7ff64ab9b351eb96c9696315

Contents?: true

Size: 1.85 KB

Versions: 9

Compression:

Stored size: 1.85 KB

Contents

require 'spec_helper'
require 'puppet/pops'
require 'puppet/loaders'

describe 'the assert_type function' do
  after(:all) { Puppet::Pops::Loaders.clear }

  let(:loaders) { Puppet::Pops::Loaders.new(Puppet::Node::Environment.create(:testing, [])) }
  let(:func) { loaders.puppet_system_loader.load(:function, 'assert_type') }

  it 'asserts compliant type by returning the value' do
    expect(func.call({}, type(String), 'hello world')).to eql('hello world')
  end

  it 'accepts type given as a String' do
    expect(func.call({}, 'String', 'hello world')).to eql('hello world')
  end

  it 'asserts non compliant type by raising an error' do
    expect do
      func.call({}, type(Integer), 'hello world')
    end.to raise_error(Puppet::Pops::Types::TypeAssertionError, /does not match actual/)
  end

  it 'checks that first argument is a type' do
    expect do
      func.call({}, 10, 10)
    end.to raise_error(ArgumentError, "'assert_type' expected one of:
  (Type type, Any value, Callable[Type, Type] block?)
    rejected: parameter 'type' expects a Type value, got Integer
  (String type_string, Any value, Callable[Type, Type] block?)
    rejected: parameter 'type_string' expects a String value, got Integer")
  end

  it 'allows the second arg to be undef/nil)' do
    expect do
      func.call({}, optional(String), nil)
    end.to_not raise_error
  end

  it 'can be called with a callable that receives a specific type' do
    expected, actual, actual2 = func.call({}, 'Optional[String]', 1) { |expected, actual| [expected, actual, actual] }
    expect(expected.to_s).to eql('Optional[String]')
    expect(actual.to_s).to eql('Integer[1, 1]')
    expect(actual2.to_s).to eql('Integer[1, 1]')
  end

  def optional(type_ref)
    Puppet::Pops::Types::TypeFactory.optional(type(type_ref))
  end

  def type(type_ref)
    Puppet::Pops::Types::TypeFactory.type_of(type_ref)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
puppet-4.3.2 spec/unit/functions/assert_type_spec.rb
puppet-4.3.2-x86-mingw32 spec/unit/functions/assert_type_spec.rb
puppet-4.3.2-x64-mingw32 spec/unit/functions/assert_type_spec.rb
puppet-4.3.1 spec/unit/functions/assert_type_spec.rb
puppet-4.3.1-x86-mingw32 spec/unit/functions/assert_type_spec.rb
puppet-4.3.1-x64-mingw32 spec/unit/functions/assert_type_spec.rb
puppet-4.3.0 spec/unit/functions/assert_type_spec.rb
puppet-4.3.0-x86-mingw32 spec/unit/functions/assert_type_spec.rb
puppet-4.3.0-x64-mingw32 spec/unit/functions/assert_type_spec.rb