Signed-off-by: Mo Morsi <[email protected]>
---
Local-branch: feature/master/7474
 spec/unit/provider/web/curl_spec.rb |  104 +++++++++++++++++++++++++++++++++++
 spec/unit/type/web_spec.rb          |   44 +++++++++++++++
 2 files changed, 148 insertions(+), 0 deletions(-)
 create mode 100644 spec/unit/provider/web/curl_spec.rb
 create mode 100644 spec/unit/type/web_spec.rb

diff --git a/spec/unit/provider/web/curl_spec.rb 
b/spec/unit/provider/web/curl_spec.rb
new file mode 100644
index 0000000..1bb6f6c
--- /dev/null
+++ b/spec/unit/provider/web/curl_spec.rb
@@ -0,0 +1,104 @@
+#!/usr/bin/env rspec
+require 'spec_helper'
+
+provider_class = Puppet::Type.type(:web).provider(:curl)
+
+describe provider_class do
+  before :each do
+    @resource = Puppet::Resource.new(:web, 'foo')
+    @provider = provider_class.new(@resource)
+  end
+
+  def http_request(http_method, url)
+    @provider.method("#{http_method}=".to_sym).call url
+  end
+
+  ['get', 'post'].each do |http_method|
+    describe "##{http_method}" do
+      it "should issue #{http_method} request to uri" do
+        proc { 
+          http_request http_method, "http://www.puppetlabs.com";
+        }.should_not raise_error(Puppet::Error)
+      end
+
+      it "should accept parameters for #{http_method} request to uri" do
+        proc { 
+          @resource.stubs(:[]).returns(nil)
+          @resource.stubs(:[]).with(:parameters).returns({:q => 'puppet' })
+          @resource.stubs(:[]).with(:follow).returns(true)
+          http_request http_method, "http://www.google.com";
+        }.should_not raise_error(Puppet::Error)
+      end
+
+      it "should verify default success return http status code for 
#{http_method} request to uri" do
+        proc { 
+          http_request http_method, "http://foobar";
+        }.should raise_error(Puppet::Error)
+      end
+
+      it "should verify return http status code for #{http_method} request to 
uri" do
+        proc { 
+          expected_return_code = http_method == "get" ? '301' : '405'
+          @resource.stubs(:[]).returns(nil)
+          @resource.stubs(:[]).with(:follow).returns(false)
+          @resource.stubs(:[]).with(:returns).returns([expected_return_code])
+          http_request http_method, "http://google.com";
+        }.should_not raise_error(Puppet::Error)
+      end
+
+      it "should verify body contents for #{http_method} request to uri" do
+        proc { 
+          @resource.stubs(:[]).returns(nil)
+          
@resource.stubs(:[]).with(:verify).returns('.*http://docs.puppetlabs.com.*')
+          @resource.stubs(:[]).with(:follow).returns(true)
+          http_request http_method, "http://www.puppetlabs.com";
+        }.should_not raise_error(Puppet::Error)
+      end
+
+      # TODO figure out a good way to verify login/logout
+
+      it "should only issue #{http_method} request to uri if 'if' request is 
true" do
+        query_result   = Curl::Easy.new
+        Curl::Easy.expects(:web_request).times(2).returns(query_result)
+        query_result.expects(:valid_status_code?).returns(true)
+        @resource.stubs(:[]).returns(nil)
+        @resource.stubs(:[]).with(:if).returns({ 'http_method' => 'get',
+            'uri' => 'http://google.com', 'follow' => true, 'returns' => 
['500'] })
+            
+        http_request http_method, "http://www.puppetlabs.com";
+      end
+
+      it "should not issue #{http_method} request to uri if 'if' request is 
false" do
+        query_result   = Curl::Easy.new
+        Curl::Easy.expects(:web_request).times(1).returns(query_result)
+        query_result.expects(:valid_status_code?).returns(false)
+        @resource.stubs(:[]).returns(nil)
+        @resource.stubs(:[]).with(:if).returns({ 'http_method' => 'get',
+            'uri' => 'http://google.com', 'follow' => true, 'returns' => 
['400'] })
+        http_request http_method, "http://www.puppetlabs.com";
+      end
+
+      it "should only issue #{http_method} request to uri if 'unless' request 
is false" do
+        query_result   = Curl::Easy.new
+        Curl::Easy.expects(:web_request).times(2).returns(query_result)
+        query_result.expects(:valid_status_code?).returns(false)
+        @resource.stubs(:[]).returns(nil)
+        @resource.stubs(:[]).with(:unless).returns({ 'http_method' => 'get',
+            'uri' => 'http://google.com', 'follow' => true, 'returns' => 
['500'] })
+            
+        http_request http_method, "http://www.puppetlabs.com";
+      end
+
+      it "should not issue #{http_method} request to uri if 'unless' request 
is true" do
+        query_result   = Curl::Easy.new
+        Curl::Easy.expects(:web_request).times(1).returns(query_result)
+        query_result.expects(:valid_status_code?).returns(true)
+        @resource.stubs(:[]).returns(nil)
+        @resource.stubs(:[]).with(:unless).returns({ 'http_method' => 'get',
+            'uri' => 'http://google.com', 'follow' => true, 'returns' => 
['400'] })
+        http_request http_method, "http://www.puppetlabs.com";
+      end
+
+    end
+  end
+end
diff --git a/spec/unit/type/web_spec.rb b/spec/unit/type/web_spec.rb
new file mode 100644
index 0000000..c78ab83
--- /dev/null
+++ b/spec/unit/type/web_spec.rb
@@ -0,0 +1,44 @@
+#!/usr/bin/env rspec
+require 'spec_helper'
+
+host = Puppet::Type.type(:web)
+
+describe Puppet::Type.type(:web) do
+  before do
+    @class = host
+  end
+
+  it "should have :name be its namevar" do
+    @class.key_attributes.should == [:name]
+  end
+
+  describe "when validating attributes" do
+    [:parameters, :returns, :follow, :verify, :login, :logout, :unless].each 
do |param|
+      it "should have a #{param} parameter" do
+        @class.attrtype(param).should == :param
+      end
+    end
+
+    [:get, :post ].each do |property|
+      it "should have a #{property} property" do
+        @class.attrtype(property).should == :property
+      end
+    end
+  end
+
+  describe "when validating values" do
+    [:get, :post ].each do |property|
+      it "should require a valid uri for #{property} requests" do
+        proc { @class.new(:name => "#{property}_uri", property.to_sym => "") 
}.should raise_error(Puppet::Error,"Parameter #{property} failed: Specified uri 
 is not valid")
+      end
+
+      it "should require a valid returns for #{property} requests if 
specified" do
+        proc { @class.new(:name => "#{property}_uri", property.to_sym => 
"http://www.puppetlabs.com";, :returns => "invalid" ) }.should 
raise_error(Puppet::Error,"Parameter returns failed: Invalid http status code 
invalid specified")
+      end
+
+      it "should require a valid follow value for #{property} requests" do
+        proc { @class.new(:name => "#{property}_uri", property.to_sym => 
"http://www.puppetlabs.com";, :follow => "invalid" ) }.should 
raise_error(Puppet::Error,'Parameter follow failed: Invalid value "invalid". 
Valid values are true, false. ')
+      end
+    end
+  end
+end
-- 
1.7.2.3

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to