summaryrefslogtreecommitdiffstats
path: root/spec/unit/parser/ast/collection_spec.rb
blob: fd7bf75c1adc3ddce2452edb357315c77dc67c00 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env ruby

require 'spec_helper'

describe Puppet::Parser::AST::Collection do
  before :each do
    @mytype = Puppet::Resource::Type.new(:definition, "mytype")
    @environment = Puppet::Node::Environment.new
    @environment.known_resource_types.add @mytype

    @compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("foonode", :environment => @environment))
    @scope = Puppet::Parser::Scope.new(:compiler => @compiler)

    @overrides = stub_everything 'overrides'
    @overrides.stubs(:is_a?).with(Puppet::Parser::AST).returns(true)
  end

  it "should evaluate its query" do
    query = mock 'query'
    collection = Puppet::Parser::AST::Collection.new :query => query, :form => :virtual
    collection.type = 'mytype'

    query.expects(:safeevaluate).with(@scope)

    collection.evaluate(@scope)
  end

  it "should instantiate a Collector for this type" do
    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "test"
    @test_type = Puppet::Resource::Type.new(:definition, "test")
    @environment.known_resource_types.add @test_type

    Puppet::Parser::Collector.expects(:new).with(@scope, "test", nil, nil, :virtual)

    collection.evaluate(@scope)
  end

  it "should tell the compiler about this collector" do
    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype"
    Puppet::Parser::Collector.stubs(:new).returns("whatever")

    @compiler.expects(:add_collection).with("whatever")

    collection.evaluate(@scope)
  end

  it "should evaluate overriden paramaters" do
    collector = stub_everything 'collector'
    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype", :override => @overrides
    Puppet::Parser::Collector.stubs(:new).returns(collector)

    @overrides.expects(:safeevaluate).with(@scope)

    collection.evaluate(@scope)
  end

  it "should tell the collector about overrides" do
    collector = mock 'collector'
    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "mytype", :override => @overrides
    Puppet::Parser::Collector.stubs(:new).returns(collector)

    collector.expects(:add_override)

    collection.evaluate(@scope)
  end

  it "should fail when evaluating undefined resource types" do
    collection = Puppet::Parser::AST::Collection.new :form => :virtual, :type => "bogus"
    lambda { collection.evaluate(@scope) }.should raise_error "Resource type bogus doesn't exist"
  end
end