summaryrefslogtreecommitdiffstats
path: root/spec/unit/provider/package/macports_spec.rb
blob: 8e08242d8fa0f0bbd79076c57a81c11fccfc55e9 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
require 'spec_helper'

provider_class = Puppet::Type.type(:package).provider(:macports)

describe provider_class do
  let :resource_name do
    "foo"
  end

  let :resource do
    Puppet::Type.type(:package).new(:name => resource_name, :provider => :macports)
  end

  let :provider do
    prov = resource.provider
    prov.expects(:execute).never
    prov
  end

  let :current_hash do
    {:name => resource_name, :ensure => "1.2.3", :revision => "1", :provider => :macports}
  end

  describe "provider features" do
    subject { provider }

    it { should be_installable }
    it { should be_uninstallable }
    it { should be_upgradeable }
    it { should be_versionable }
  end

  describe "when listing all instances", :'fails_on_ruby_1.9.2' => true do
    it "should call port -q installed" do
      provider_class.expects(:port).with("-q", :installed).returns("")
      provider_class.instances
    end

    it "should create instances from active ports" do
      provider_class.expects(:port).returns("foo @1.234.5_2 (active)")
      provider_class.instances.size.should == 1
    end

    it "should ignore ports that aren't activated" do
      provider_class.expects(:port).returns("foo @1.234.5_2")
      provider_class.instances.size.should == 0
    end
  end

  describe "when installing" do
   it "should not specify a version when ensure is set to latest" do
     resource[:ensure] = :latest
     provider.expects(:port).with { |flag, method, name, version|
       version.should be_nil
     }
     provider.install
   end

   it "should not specify a version when ensure is set to present" do
     resource[:ensure] = :present
     provider.expects(:port).with { |flag, method, name, version|
       version.should be_nil
     }
     provider.install
   end

   it "should specify a version when ensure is set to a version" do
     resource[:ensure] = "1.2.3"
     provider.expects(:port).with { |flag, method, name, version|
       version.should be
     }
     provider.install
   end
  end

  describe "when querying for the latest version" do
    let :new_info_line do
      "1.2.3 2"
    end
    let :infoargs do
      ["-q", :info, "--line", "--version", "--revision",  resource_name]
    end

    it "should return nil when the package cannot be found" do
      resource[:name] = resource_name
      provider.expects(:port).returns("")
      provider.latest.should == nil
    end

    it "should return the current version if the installed port has the same revision" do
      current_hash[:revision] = "2"
      provider.expects(:port).with(*infoargs).returns(new_info_line)
      provider.expects(:query).returns(current_hash)
      provider.latest.should == current_hash[:ensure]
    end

    it "should return the new version_revision if the installed port has a lower revision" do
      current_hash[:revision] = "1"
      provider.expects(:port).with(*infoargs).returns(new_info_line)
      provider.expects(:query).returns(current_hash)
      provider.latest.should == "1.2.3_2"
    end
  end

  describe "when updating a port" do
    it "should execute port upgrade if the port is installed" do
      resource[:name] = resource_name
      resource[:ensure] = :present
      provider.expects(:query).returns(current_hash)
      provider.expects(:port).with("-q", :upgrade, resource_name)
      provider.update
    end

    it "should execute port install if the port is not installed", :'fails_on_ruby_1.9.2' => true do
      resource[:name] = resource_name
      resource[:ensure] = :present
      provider.expects(:query).returns("")
      provider.expects(:port).with("-q", :install, resource_name)
      provider.update
    end
  end
end