summaryrefslogtreecommitdiff
path: root/spec/support/resource_helpers.rb
blob: a4098b3891ea2269948b1338d01235e259f264b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class ProviderExampleGroup < Spec::Example::ExampleGroup

  attr_reader :resource
  
  before :each do
    resource_hash = example_group_hierarchy.inject({}) do |memo, klass|
      memo.merge(klass.options[:resource] || {})
    end
    full_hash = resource_hash.merge(:provider => described_class.name)
    @resource = described_class.resource_type.new(full_hash)
  end
  
  subject { described_class.new(@resource) }
  alias :provider :subject

  class << self

    def field(field, &block)
      ResourceField.new(self, field, &block)
    end

    # call-seq:
    #
    #   given(:ensure)
    #   given(:ensure => :present)
    def context_with(*args, &block)
      options = args.last.is_a?(Hash) ? args.pop : {}
      if args.empty?
        text = options.map { |k, v| "#{k} => #{v.inspect}" }.join(' and with ')
        context("and with #{text}", {:resource => options}, &block)
      else
        text = args.join(', ')
        placeholders = args.inject({}) { |memo, key| memo.merge(key => 'an-unimportant-value') }
        context("and with a #{text}", {:resource => placeholders}, &block)
      end
    end

    def context_without(field, &block)
      context("and without a #{field}", &block)
    end
      
  end

end

Spec::Example::ExampleGroupFactory.register(:provider, ProviderExampleGroup)

def describe_provider(type_name, provider_name, options = {}, &block)
  provider_class = Puppet::Type.type(type_name).provider(provider_name)
  describe(provider_class, options.merge(:type => :provider), &block)
end